社区讨论
#1数据点
P5440【XR-2】奇迹参与者 7已保存回复 17
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 17 条
- 当前快照
- 1 份
- 快照标识符
- @mi85vfuy
- 此快照首次捕获于
- 2025/11/21 09:08 4 个月前
- 此快照最后确认于
- 2025/11/21 09:45 4 个月前
既然#1代表0个‘-’,那么我输出全0为什么也会WA?
CPP#include<bits/stdc++.h>
using namespace std;
int n;
char ch[200];
int main()
{
cin>>n;
while(n--)
{
cin>>ch;
cout<<0<<endl;
}
}
然后比赛时我写的也是全WA,自己试的时候感觉都过了啊
CPP// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
int prime[99991230+1],cnt,n,num[10],sum;
int isprime[99991230+1];
char ch[10];
int ge()
{
int ans=0;
for(int i=1;i<=8;i++)
ans=ans*10+num[i];
if(isprime[ans])return 0;
if(isprime[num[7]*10+num[8]])return 0;
ans=0;
for(int i=5;i<=8;i++)
ans=ans*10+num[i];
if(isprime[ans])return 0;
return 1;
}
void dfs(int i){
if(i==8&&num[8]!=-1){if(ge())sum++;return;}
if(i==8&&num[8]==-1)
{
if(num[7]==0)for(int j=1;j<=9;j++)
{
num[8]=j;if(ge())sum++;
}
else for(int j=0;j<=9;j++)
{
num[8]=j;
if(ge())sum++;
}
num[8]=-1;
}
int flg=0;
for(int j=i;j<=8;j++)if(num[j]==-1){i=j;flg=1;break;}
if(!flg)dfs(8);
if(i<=2&&num[i]==-1)
{
for(int j=0;j<=9;j++)
{
num[i]=j;
dfs(i+1);
}
num[i]=-1;
}
if(i==3&&num[i]==-1)
{
if(num[4]==0)for(int j=1;j<=9;j++)
{
num[3]=j;
dfs(4);
}
else for(int j=0;j<=9;j++)
{
num[3]=j;
dfs(4);
}
num[i]=-1;
}
if(i==4&&num[i]==-1)
{
if(num[1]+num[2]+num[3]==0)
for(int j=1;j<=9;j++)
{
num[4]=j;
dfs(5);
}
else for(int j=0;j<=9;j++)
{
num[4]=j;
dfs(5);
}
num[4]=-1;
}
if(i==5&&num[i]==-1)
{
if(num[6]>=3){num[5]=0;dfs(6);}
else for(int j=0;j<=1;j++)
{
num[5]=j;
dfs(6);
}
num[5]=-1;
}
if(i==6&&num[i]==-1)
{
if(num[5]==1)for(int j=0;j<=2;j++)
{
num[6]=j;
dfs(7);
}
else for(int j=1;j<=9;j++)
{
num[6]=j;
dfs(7);
}
num[6]=-1;
}
if(i==7&&num[i]==-1){
for(int j=0;j<=2;j++)
{
num[7]=j;
dfs(8);
}num[7]=-1;
}
if(i==8&&num[8]==-1)
{
if(num[7]==0)for(int j=1;j<=9;j++)
{
num[8]=j;if(ge())sum++;
}
else for(int j=0;j<=9;j++)
{
num[8]=j;
if(ge())sum++;
}
num[8]=-1;
}
}
int main()
{
isprime[1]=1;
for(int i=2;i<=99991230;i++)
{
if(!isprime[i])prime[++cnt]=i;
for(int j=1;j<=cnt&&i*prime[j]<=99991230;j++)
{
isprime[i*prime[j]]=1;
if(i%prime[j]==0)break;
}
}
cin>>n;
for(int k=1;k<=n;k++)
{
cin>>ch;
int len=strlen(ch);
int ce=0;
for(int i=1;i<=len;i++)
{
if(ch[i-1]=='-')num[i]=-1,ce++;
else num[i]=ch[i-1]-'0';
}
if(ce==0){
cout<<0<<endl;continue;
}
if(num[1]!=-1&&num[2]!=-1&&num[3]!=-1&&num[4]!=-1&&num[1]+num[2]+num[3]+num[4]==0){
cout<<0<<endl;continue;
}
if(num[5]!=-1&&num[6]!=-1&&(((num[5]*10+num[6])>12)||((num[5]*10+num[6])==0))){
cout<<0<<endl;continue;
}
if(num[7]!=-1&&num[8]!=-1&&(((num[7]*10+num[8])>30)||((num[7]*10+num[8])==0))){
cout<<0<<endl;continue;
}
dfs(0);
cout<<sum<<endl;
sum=0;
}
}
回复
共 17 条回复,欢迎继续交流。
正在加载回复...