結果

問題 No.1274 楽しい格子点
ユーザー 👑 NachiaNachia
提出日時 2020-10-30 21:58:45
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
(最新)
AC  
(最初)
実行時間 -
コード長 950 bytes
コンパイル時間 1,798 ms
コンパイル使用メモリ 167,252 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-07-22 18:37:14
合計ジャッジ時間 3,079 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 56 WA * 1
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;
using LL = long long;
using ULL = unsigned long long;
#define rep(i,n) for(int i=0; i<(n); i++)

LL GCD(LL a, LL b) { return b ? GCD(b, a % b) : a; }

double F(LL x) {
	return pow(1. / double(x), double(x));
}

int main() {
	cout << fixed << setprecision(10);

	double ans = 0.;

	LL A, B; cin >> A >> B;
	A = abs(A); B = abs(B);

	if (A != 0 && B != 0) {
		LL G = GCD(A, B);
		A /= G; B /= G;

		if (A % 2 == 1 && B % 2 == 1) {
			rep(x, 20) rep(y, 20) {
				if (x % G != 0 || y % G != 0) continue;
				if ((x + y) % 2 == 1) continue;
				ans += F(x + y + 2);
			}
		}
		else {
			rep(x, 20) rep(y, 20) {
				if (x % G != 0 || y % G != 0) continue;
				ans += F(x + y + 2);
			}
		}
	}
	else if (A == 0 && B == 0) {
		ans = 0.25;
	}
	else {
		if (B == 0) swap(A, B);
		rep(x, 20) rep(y, 20) {
			if (x % B != 0 || y % B != 0) continue;
			ans += F(x + y + 2);
		}
	}

	cout << ans << endl;

	return 0;
}
0