社区讨论

0pts RE求调(取模0找不到问题)

P1069[NOIP 2009 普及组] 细胞分裂参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mjqqktpe
此快照首次捕获于
2025/12/29 13:47
2 个月前
此快照最后确认于
2026/01/01 17:00
2 个月前
查看原帖
按照提交记录是取模了0,但是检查感觉不会出现这样的问题。
程序最后放了第一个测试点,本地Dev跑可以跑过去。但是交到你谷全R。
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N(1e4+5),M(5e4+5);
int n,m1,m2;
int s[N];
// Euler
int p[M],pc;
map<int,bool>flag;
inline void init(){
	flag[0]=flag[1]=true;
	for(int i(2);i<=5e4;++i){
		if(!flag[i]){
			for(int j(2);i*j<=5e4;++j){
				flag[i*j]=true;
			}p[++pc]=i;
		}
	}return ;
}
// solve
int lim[M],cnt[M],ans(-1),tmp(0);
// seperate
inline int sep(int x,int tp){
	for(int i(1);i<=pc&&x!=1;++i){
		while(x%p[i]==0){
			x/=p[i];
			if(tp==1) ++lim[i];
			else ++cnt[i];
		}
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	init();
	cin>>n>>m1>>m2;
	m1=sep(m1,1);
	for(int i(1);i<=pc;++i)lim[i]*=m2;
	for(int i(1);i<=n;++i){
		memset(cnt,0,sizeof cnt);tmp=0;
		cin>>s[i];
		s[i]=sep(s[i],0);
		for(int j(1);j<=pc;++j){
			if(!cnt[j]&&lim[j]){
				tmp=-1;
				break;
			}tmp=max(tmp,lim[j]-cnt[j]);
		}if(tmp==-1)continue;
		if(m1!=1){
			if(m1==s[i])tmp=max(tmp,m2-1);
			else tmp=-1;
		}ans=max(ans,tmp);
	}cout<<ans;
	return 0;
}
/*
P1:
10
1 1
645855438 311218536 15797250 227733808 68960766 222753465 32576949 223726014 566371728 250463473

0
*/

回复

3 条回复,欢迎继续交流。

正在加载回复...