結果

問題 No.2847 Birthday Attack
ユーザー kotatsugamekotatsugame
提出日時 2024-08-23 21:54:16
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
TLE  
実行時間 -
コード長 959 bytes
コンパイル時間 751 ms
コンパイル使用メモリ 79,132 KB
実行使用メモリ 267,436 KB
最終ジャッジ日時 2024-08-23 21:55:21
合計ジャッジ時間 59,389 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2,981 ms
265,740 KB
testcase_01 AC 2,945 ms
266,324 KB
testcase_02 AC 2,965 ms
265,468 KB
testcase_03 AC 2,999 ms
266,608 KB
testcase_04 TLE -
testcase_05 TLE -
testcase_06 TLE -
testcase_07 TLE -
testcase_08 TLE -
testcase_09 TLE -
testcase_10 TLE -
testcase_11 TLE -
testcase_12 TLE -
testcase_13 TLE -
testcase_14 TLE -
testcase_15 TLE -
testcase_16 TLE -
testcase_17 TLE -
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function 'int main()':
main.cpp:40:17: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17' [-Wc++17-extensions]
   40 |         for(auto[a,b]:T)
      |                 ^

ソースコード

diff #

#include<iostream>
#include<vector>
#include<algorithm>
#include<cassert>
using namespace std;
int gcd(int a,int b)
{
	while(b)
	{
		int t=a%b;
		a=b;
		b=t;
	}
	return a;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	vector<pair<int,int> >T;
	auto add=[&](int a,int b){
		int mxab=max(a,b);
		for(int k=1;mxab*k<=(int)4e6;k++)T.emplace_back(a*k,b*k);
	};
	for(int m=1;m*m<=(int)6e6;m++)
	{
		for(int n=1;n<m;n++)
		{
			if(n%2&&m%2)continue;
			if(gcd(n,m)!=1)continue;
			add(m*m-n*n,2*m*n);
			add(2*m*n,m*m-n*n);
		}
	}
	sort(T.begin(),T.end());
	T.erase(unique(T.begin(),T.end()),T.end());
	int X,Y,M;
	cin>>X>>Y>>M;
	long ans=0;
	for(auto[a,b]:T)
	{
		int lx=a+1,rx=X-a;
		int ly=b+1,ry=Y-b;
		if(lx>rx||ly>ry)continue;
		ans+=(long)(rx-lx+1)*(ry-ly+1)%M;
		if(ans>=M)ans-=M;
	}
	ans=ans*2%M;
	for(int a=1;a+1<=X-a;a++)ans+=(long)(X-a-a-1+1)*Y*2%M;
	for(int b=1;b+1<=Y-b;b++)ans+=(long)X*(Y-b-b-1+1)*2%M;
	ans%=M;
	cout<<ans<<endl;
}
0