lay_contest beta round 00001 (in Japanese) B問題 月日

問題概要

m月d日をm/dとする。2016年においてa月b日からc月d日まで異なる有理数はいくつあるか。

解答内容

本来は分子と分母の組ををsetに突っ込んでいくのが想定解答かと思うけど、自分は小数で保持しました

コード

#include<iostream>
#include<set>

int main() {
	int n;
	std::cin >> n;

	int month[13] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };


	for (int i = 0; i < n; i++) {
		int sm, sd, em, ed;
		std::set<double> s;
		std::cin >> sm >> sd >> em >> ed;
		for (int j = sm; j <= em; j++) {
			for (int k = sd; k <= month[j] && (j != em || k <= ed); k++) {
				s.insert(1.0 * j / k);
			}
			sd = 1;
		}
		std::cout << s.size() << std::endl;
	}
	return 0;
}