結果
| 問題 |
No.474 色塗り2
|
| コンテスト | |
| ユーザー |
snuke
|
| 提出日時 | 2016-12-18 03:52:53 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 122 ms / 2,000 ms |
| コード長 | 1,455 bytes |
| コンパイル時間 | 1,542 ms |
| コンパイル使用メモリ | 160,536 KB |
| 実行使用メモリ | 36,544 KB |
| 最終ジャッジ日時 | 2024-12-14 14:22:28 |
| 合計ジャッジ時間 | 2,257 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 4 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:45:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
45 | scanf("%d",&ts);
| ~~~~~^~~~~~~~~~
main.cpp:55:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
55 | scanf("%d%d%d",&a,&b,&c);
| ~~~~~^~~~~~~~~~~~~~~~~~~
ソースコード
#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0; i < (n); ++i)
#define fi first
#define se second
using namespace std;
typedef long long int ll;
// mod
const int K = 20;
const int mod = 1<<K;
struct mint {
ll x;
mint():x(0){}
mint(ll x):x((x%mod+mod)%mod){}
mint& operator+=(const mint& a){ if((x+=a.x)>=mod) x-=mod; return *this;}
mint& operator-=(const mint& a){ if((x+=mod-a.x)>=mod) x-=mod; return *this;}
mint& operator*=(const mint& a){ (x*=a.x)%=mod; return *this;}
mint operator+(const mint& a)const{ return mint(*this) += a;}
mint operator-(const mint& a)const{ return mint(*this) -= a;}
mint operator*(const mint& a)const{ return mint(*this) *= a;}
};
mint ex(mint a, ll t) {
if(!t) return 1;
mint res = ex(a,t/2);
res *= res;
return (t&1)?res*a:res;
}
//
typedef pair<mint,int> P;
P p[mod*2];
mint inv(mint a) { return ex(a,mod/2-1);}
mint comb(int a, int b) {
int c = a-b;
int two = p[a].se-p[b].se-p[c].se;
if (two >= K) return 0;
mint res = p[a].fi*inv(p[b].fi)*inv(p[c].fi);
res *= 1<<two;
return res;
}
int main() {
int ts;
scanf("%d",&ts);
p[0] = P(1,0);
rep(i,mod*2) if (i) {
p[i] = p[i-1];
int x = i;
while (x%2 == 0) p[i].se++, x >>= 1;
p[i].fi *= x;
}
rep(ti,ts) {
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
// C(C(c+b-1,b)*c+a-1,a)*c
mint x = comb(c+b-1,b)*c;
mint y = comb((x+a-1).x+mod,a)*c;
printf("%lld\n", y.x&1);
}
return 0;
}
snuke