結果
| 問題 | No.2206 Popcount Sum 2 |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-06-01 17:19:03 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,271 bytes |
| 記録 | |
| コンパイル時間 | 1,548 ms |
| コンパイル使用メモリ | 220,300 KB |
| 実行使用メモリ | 14,464 KB |
| 最終ジャッジ日時 | 2026-06-01 17:19:33 |
| 合計ジャッジ時間 | 7,972 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 1 TLE * 1 -- * 16 |
ソースコード
#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.m<b.m;
}
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].n/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=1;i<=t;i++){
while(b<q[i].m){
d=(d+c(a-1,b))%mod;
b++;
}while(b>q[i].m){
d=(d+mod-c(a-1,b-1))%mod;
b--;
}while(a<q[i].n){
d=(d+d-c(a-1,b-1)+mod)%mod;
a++;
}ans[q[i].i]=d*(fj[q[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