結果
| 問題 | No.2206 Popcount Sum 2 |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-06-01 17:23:29 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,301 bytes |
| 記録 | |
| コンパイル時間 | 2,411 ms |
| コンパイル使用メモリ | 220,412 KB |
| 実行使用メモリ | 15,744 KB |
| 最終ジャッジ日時 | 2026-06-01 17:23:47 |
| 合計ジャッジ時間 | 16,507 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 1 WA * 17 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
const long long mod=998244353;
const int p=int(sqrt(200000));
long long fc[200005]={1},inv[200005]={1},fj[200005]={1},ans[200005];
long long c(int a,int b){
return fc[a]*inv[b]%mod*inv[a-b]%mod;
}long long a(int a,int b){
return fc[a]*inv[a-b]%mod;
}long long qpow(long long a,long long b){
if(b==0)return 1;
if(b==1)return a;
long long t=qpow(a,b/2);
return t*t%mod*qpow(a,b%2)%mod;
}
int t;
struct que{
int n,m,i;
}q[200005];
vector<que>vv[1005];
bool operator<(que a,que b){
return a.n<b.n;
}
int main(){
for(int i=1;i<=2e5+2;i++)fc[i]=fc[i-1]*i%mod,inv[i]=qpow(fc[i],mod-2),fj[i]=fj[i-1]*2%mod;
cin>>t;
for(int i=1;i<=t;i++){
cin>>q[i].n>>q[i].m,q[i].i=i;
vv[q[i].m/p].push_back(q[i]);
}for(int pp=0;pp*p<=2e5;pp++){
int len=vv[pp].size();
sort(vv[pp].begin(),vv[pp].end());
int a=1,b=1;
long long d=1;
for(int i=0;i<len;i++){
while(b<vv[pp][i].m){
d=(d+c(a-1,b))%mod;
b++;
}while(b>vv[pp][i].m){
d=(d+mod-c(a-1,b-1))%mod;
b--;
}while(a<vv[pp][i].n){
d=(d+d-c(a-1,b-1)+mod)%mod;
a++;
}
ans[vv[pp][i].i]=d*(fj[vv[pp][i].n]+mod-1)%mod;
}
}for(int i=1;i<=t;i++)cout<<ans[i]<<endl;
return 0;
}/*
(n,m)->(n,m+1) +=C(n-1,m)
(n,m)->(n,m-1) -=C(n-1,m-1)
(n,m)->(n+1,m) +=(n,m)-C(n-1,m-1)
*/
vjudge1