求助,排序+离线做了25分
查看原帖
求助,排序+离线做了25分
661913
liwenxi1145144444楼主2024/8/19 16:41
#include<bits/stdc++.h>	
#define int long long
using namespace std;
int t,k,C[2005][2005],x[2005],y[2005];
struct node{
	int x,y;
}a[10005];
map<pair<int,int>,int> v;
bool cmp(node a,node b){
	if(a.x==b.x){
		return a.y<b.y;
	}
	return a.x<b.x;
}
signed main(){
	cin>>t>>k;
	for(int i=1;i<=t;i++){
		cin>>a[i].x>>a[i].y;
		x[i]=a[i].x;
		y[i]=a[i].y;
	}
	sort(a+1,a+t+1,cmp);
	for(int i=1;i<=2000;i++){
		C[i][0]=C[0][i]=1;
	}
	C[1][1]=1;
	int s=1,sum=0;
	for(int i=2;i<=2000;i++){
		for(int j=0;j<=i;j++){
			if(j==0){
				C[i][j]=C[i-1][j];
			}else{
				C[i][j]=(C[i-1][j-1]+C[i-1][j])%k;	
			}
			if(C[i][j]==0){
				sum++;
			}
			if(i==a[s].x&&j==a[s].y){
				v[{i,j}]=sum;
				s++;
				if(s==t+1){
					goto stop;
				}
			}else if(i==a[s].x&&a[s].y>i&&j==i){
				v[{i,a[s].y}]=sum;
				s++;
				if(s==t+1){
					goto stop;
				}
			}
			if(a[s].x==1){
				v[{a[s].x,a[s].y}]=0;
				s++;
				if(s==t+1){
					goto stop;
				}
			}
		}
	}
	stop:
	for(int i=1;i<=t;i++){
		cout<<v[{x[i],y[i]}]<<"\n";
	}
	return 0;
}
2024/8/19 16:41
加载中...