結果

問題 No.2206 Popcount Sum 2
コンテスト
ユーザー vjudge1
提出日時 2026-06-01 17:19:03
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
TLE  
実行時間 -
コード長 1,271 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 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
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#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)

*/
0