結果
問題 |
No.2206 Popcount Sum 2
|
ユーザー |
![]() |
提出日時 | 2025-08-04 23:37:54 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 923 ms / 4,000 ms |
コード長 | 1,221 bytes |
コンパイル時間 | 1,577 ms |
コンパイル使用メモリ | 165,912 KB |
実行使用メモリ | 13,284 KB |
最終ジャッジ日時 | 2025-08-04 23:38:09 |
合計ジャッジ時間 | 14,857 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 18 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:50:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 50 | scanf("%lld",&t); | ~~~~~^~~~~~~~~~~ main.cpp:53:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 53 | scanf("%lld %lld",&q[i].x,&q[i].y); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include<bits/stdc++.h> using namespace std; #define int long long const int N=2e5+10,mod=998244353,s=sqrt(N); int t,n,m,fac[N],ny[N],ans[N],x,y,sum; int ksm(int xx,int yy){ int an=1,p=xx; while(yy){ if(yy&1)an*=p; an%=mod; p*=p; p%=mod; yy>>=1; } return an; } int C(int xx,int yy){ if(xx<yy)return 0; return fac[xx]*ny[xx-yy]%mod*ny[yy]%mod; } struct node{ int x,y,id; }q[N]; bool cmp(node x,node y){ if(x.x/s==y.x/s)return x.y<y.y; return x.x/s<y.x/s; } void addy(){ sum=(sum+C(x,y+1))%mod; y++; } void dely(){ sum=(sum+mod-C(x,y))%mod; y--; } void addx(){ sum=(2*sum%mod+mod-C(x,y))%mod; x++; } void delx(){ sum=(sum+C(x-1,y))%mod*ny[2]%mod; x--; } signed main(){ fac[0]=ny[0]=1; for(int i=1;i<=(N-10);i++){ fac[i]=fac[i-1]*i%mod; ny[i]=ksm(fac[i],mod-2); } scanf("%lld",&t); sum=1; for(int i=1;i<=t;i++){ scanf("%lld %lld",&q[i].x,&q[i].y); q[i].x--; q[i].y--; q[i].id=i; } sort(q+1,q+t+1,cmp); for(int i=1;i<=t;i++){ while(x<q[i].x){ addx(); } while(y>q[i].y){ dely(); } while(x>q[i].x){ delx(); } while(y<q[i].y){ addy(); } ans[q[i].id]=sum*(ksm(2,q[i].x+1)-1)%mod; } for(int i=1;i<=t;i++){ printf("%lld\n",ans[i]); } return 0; }