被卡常求助
查看原帖
被卡常求助
741169
Xlw6friend楼主2025/7/24 13:37

真被卡了还是复杂度错误,只能获得63分。

#include<bits/stdc++.h>
using namespace std;
#define int long long 
inline int read(){
	int x=0,f=1;char C=getchar();
	while(C<'0'||C>'9'){if(C=='-')f=-1;C=getchar();}
	while(C>='0'&&C<='9')x=x*10+(C^48),C=getchar();
	return x*f;
}
inline void write(int x){
    if(x<0){putchar('-'); x=-x;}
    if(x>9)write(x/10);
    putchar(x%10+'0');
}
bool Ck(char c){return c!=' '&&c!='\n'&&c!='\r';}
inline void rd(char s[], int &n){
	n=0;
	s[++n]=getchar();
	while(!Ck(s[n]))s[n]=getchar();
	while(Ck(s[n]))s[++n]=getchar();
	--n;
}
const int N = 5e5+5;
bool St;

int n,p;
int a[N], ans;
int C[10][10];
struct Node{
	int num[100], n;
	inline void init(int x){
		n = 0;
		while(x){
			num[++n] = x % p;
			x /= p;
		}
	}
	inline int add(int x){
		int ret = 1;
		for(int i = 1; x; i++){
			if(i > n) num[++n] = 0;
			if(num[i] + x % p >= p){
				return 0;
			}
			num[i] += x % p;
			ret = ret * C[num[i]][x%p] % p;
			x /= p;
		}
		return ret;
	}
};

bool Ed; 
signed main()
{
	//freopen("data.txt","r",stdin);
	//cerr<< (&Ed - &St) / 1024 / 1024.0 << endl;
 	n=read();p=read();
 	C[0][0] = 1;
 	for(int i = 1; i <= p; i++){
 		C[i][0] = 1;
		for(int j = 1; j <= i; j++){
			C[i][j] = (C[i-1][j] + C[i-1][j-1]) % p;
		}	
	}
 	
 	for(int i = 1; i <= n; i++){
 		a[i] = read();
	}
	for(int l = 1; l <= n; l++){
		int cur = 1;
		Node sum; sum.init(a[l]);
		ans += cur;
		for(int r = l + 1; r <= n; r++){
			int f = sum.add(a[r]);
			if(!f){
				break;
			}
			cur = cur * f % p;
			ans += cur; 
		}
	} 
	write(ans);
	return 0;
}
2025/7/24 13:37
加载中...