結果
問題 | No.641 Team Contest Estimation |
ユーザー | akakimidori |
提出日時 | 2019-02-08 16:11:49 |
言語 | C (gcc 12.3.0) |
結果 |
AC
|
実行時間 | 24 ms / 2,000 ms |
コード長 | 854 bytes |
コンパイル時間 | 256 ms |
コンパイル使用メモリ | 32,384 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-28 10:17:20 |
合計ジャッジ時間 | 1,104 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 1 ms
5,376 KB |
testcase_02 | AC | 1 ms
5,376 KB |
testcase_03 | AC | 1 ms
5,376 KB |
testcase_04 | AC | 1 ms
5,376 KB |
testcase_05 | AC | 24 ms
5,376 KB |
testcase_06 | AC | 24 ms
5,376 KB |
testcase_07 | AC | 24 ms
5,376 KB |
testcase_08 | AC | 24 ms
5,376 KB |
testcase_09 | AC | 1 ms
5,376 KB |
testcase_10 | AC | 1 ms
5,376 KB |
ソースコード
#include<stdio.h> #include<stdlib.h> #include<math.h> typedef long long int int64; const int mod=1000000009; int inv(int a){ int t=1; while(a>1){ t=(int64)t*(mod-mod/a)%mod; a=mod%a; } return t; } void run(void){ int n,k; scanf("%d%d",&n,&k); int cnt[61]={0}; for(int i=0;i<n;i++){ int64 a; scanf("%lld",&a); for(int j=0;j<k;j++){ cnt[j]+=a&1; a>>=1; } } int64 esum=0; int64 vsum=0; for(int i=0;i<k;i++){ int64 prob=inv(2); int64 s=(1LL<<i)%mod; int64 x=s*cnt[i]%mod; int64 y=s*(n-cnt[i])%mod; int64 e=prob*(x+y)%mod; int64 e2=prob*(x*x%mod+y*y%mod)%mod; esum=(esum+e)%mod; vsum=(vsum+e2-e*e%mod+mod)%mod; } for(int i=0;i<k;i++){ esum=2*esum%mod; vsum=4*vsum%mod; } printf("%lld\n%lld\n",esum,vsum); } int main(void){ run(); return 0; }