社区讨论
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 条回复,欢迎继续交流。
正在加载回复...