結果
| 問題 | No.2206 Popcount Sum 2 |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2025-08-02 20:33:53 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,298 bytes |
| 記録 | |
| コンパイル時間 | 3,093 ms |
| コンパイル使用メモリ | 281,520 KB |
| 実行使用メモリ | 10,824 KB |
| 最終ジャッジ日時 | 2025-08-02 20:34:07 |
| 合計ジャッジ時間 | 13,368 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 13 WA * 5 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:28:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
28 | scanf("%d",&q);
| ~~~~~^~~~~~~~~
main.cpp:30:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
30 | scanf("%d%d",&a[i].r,&a[i].l),a[i].l--,a[i].r--,a[i].id=i,b[i]=a[i].r+1;
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include<bits/stdc++.h>
using namespace std;
int B,qu[200010],fac[200010],inv[200010],inve[200010],b[200010],pw[200010];
const int P=998244353;
struct Node{
int l,r,id;
bool operator <(const Node &A)
{
if(l/B!=A.l/B) return l/B<A.l/B;
return r<A.r;
}
}a[200010];
int C(int aa,int bb)
{
return 1LL*fac[aa]*inve[bb]%P*inve[aa-bb]%P;
}
int q;
int main()
{
fac[0]=fac[1]=inv[1]=inve[0]=inve[1]=pw[0]=1,pw[1]=2;
for(int i=2;i<=200000;i++)
{
fac[i]=1LL*fac[i-1]*i%P;
inv[i]=1LL*(P-P/i)*inv[P%i]%P;
inve[i]=1LL*inve[i-1]*inv[i]%P;
pw[i]=2*pw[i-1]%P;
}
scanf("%d",&q);
for(int i=1;i<=q;i++)
scanf("%d%d",&a[i].r,&a[i].l),a[i].l--,a[i].r--,a[i].id=i,b[i]=a[i].r+1;
B=400;
sort(a+1,a+q+1);
int ans=0;
for(int i=0;i<=a[1].l;i++) ans=(ans+C(a[1].r,i))%P;
qu[a[1].id]=ans;
// printf("%d\n",a[1].id);
for(int i=2;i<=q;i++)
{
for(int j=a[i-1].l+1;j<=a[i].l;j++) ans=(ans+C(a[i-1].r,j))%P;
for(int j=a[i-1].r+1;j<=a[i].r;j++) ans=(2*ans%P-C(j-1,max(a[i].l,a[i-1].l))+P)%P;
// printf("%d\n",ans);
for(int j=a[i].l+1;j<=a[i-1].l;j++) ans=(ans-C(max(a[i-1].r,a[i].r),j)+P)%P;
for(int j=a[i-1].r;j>a[i].r;j--) ans=1LL*(ans+C(j-1,a[i].l))*((P+1)/2)%P;
qu[a[i].id]=ans;
}
// printf("%d\n",b[1]);
for(int i=1;i<=q;i++) printf("%lld\n",1LL*qu[i]*(pw[b[i]]-1+P)%P);
return 0;
}
vjudge1