- 史佳宸 的博客
洛谷题TLE求救
- @ 2026-1-1 18:31:24
TLE了13个测试点,求救
题目:
https://www.luogu.com.cn/problem/P4345 这里
代码:
#include<bits/stdc++.h>
using namespace std;
const int p=2333;
long long ny(long long a,long long b){
long long c=1;
a%=p;
while(b > 0){
if(b%2 == 1)c=(a*c)%p;
b/=2;
a=(a*a)%p;
}
return c;
}
long long c(long long n1,long long i1){
if(n1<i1)return 0;
if(n1 == i1 || i1 == 0)return 1;
if(i1 == 1 || n1 - i1 == 1)return n1;
if(i1 > n1 - i1)i1 = n1 - i1;
long long fz=1,fm=1,sum;
for(long long j=1;j<=i1;j++){
fz=fz*(n1-j+1)%p;
fm=fm*j%p;
}
long long ny_fm=ny(fm,p-2);
sum=fz*ny_fm%p;
return sum;
}
long long lucas(long long n,long long i){
if(i == 0)return 1;
if(n < i)return 0;
long long a=n%p,b=i%p,n1=(n-a)/p,i1=(i-b)/p;
long long sum=c(a,b)*lucas(n1,i1)%p;
return sum;
}
int main(){
int t;
long long sum=0;
long long n,k;
cin>>t;
int t1=t;
while(t!=0){
t--;
cin>>n>>k;
for(long long i=0;i<=k;i++){
sum+=lucas(n,i);
sum=sum%p;
}
cout<<sum;
sum=0;
}
return 0;
}