想问一下这种情况在CCF的评测环境下能过吗?
查看原帖
想问一下这种情况在CCF的评测环境下能过吗?
179337
Udumbara楼主2021/11/20 17:59

这是T1的零分代码

#include<iostream>
#include<cstdio>
using namespace std;
inline int read()
{
	int x=0; char ch=getchar();
	while(!isdigit(ch)) ch=getchar();
	while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
	return x;
}
const int N=10000005;
int T,b[N],last[N],nxt[N];
bool check(int x)
{
	int tmp=0;
	while(x)
	{
		tmp=x%10;
		if(tmp==7) return 1;
		x/=10;
	}
	return 0;
}
int main()
{
	//freopen("number.in","r",stdin);
	//freopen("number.out","w",stdout);	
	cin>>T;
	for(int i=7;i<=N;++i)
	{
		if(b[i]) continue;
		if(check(i))
		{
			b[i]=1;
			for(int j=2*i;j<=N;j+=i) b[j]=1;
		} 
	}
	int last=0;
	for(int i=1;i<=N;++i)
	{
		if(b[i]) nxt[i]=-1;
		else
		{
			nxt[last]=i;
			last=i;
		}  
	}
	nxt[0]=-1;
	int x;
	while(T--)
	{
		x=read();
		printf("%d\n",nxt[x]);
	}
	//fclose(stdin);
	//fclose(stdout);	
	return 0;
}

这是AC代码

#include<iostream>
#include<cstdio>
using namespace std;
inline int read()
{
	int x=0; char ch=getchar();
	while(!isdigit(ch)) ch=getchar();
	while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
	return x;
}
const int N=10000005;
int T,b[N+1],last[N+1],nxt[N+1];
bool check(int x)
{
	int tmp=0;
	while(x)
	{
		tmp=x%10;
		if(tmp==7) return 1;
		x/=10;
	}
	return 0;
}
int main()
{
	//freopen("number.in","r",stdin);
	//freopen("number.out","w",stdout);	
	cin>>T;
	for(int i=7;i<=N;++i)
	{
		if(b[i]) continue;
		if(check(i))
		{
			b[i]=1;
			for(int j=2*i;j<=N;j+=i) b[j]=1;
		} 
	}
	int last=0;
	for(int i=1;i<=N;++i)
	{
		if(b[i]) nxt[i]=-1;
		else
		{
			nxt[last]=i;
			last=i;
		}  
	}
	nxt[0]=-1;
	int x;
	while(T--)
	{
		x=read();
		printf("%d\n",nxt[x]);
	}
	//fclose(stdin);
	//fclose(stdout);	
	return 0;
}

第一份代码其实就是数组越界了1个,所有数组大小+1就能过了,但是在考场上所有样例都能过,而且对拍也没问题。想问一下评测环境下会怎样?

多谢后世人,戒之慎勿忘!

2021/11/20 17:59
加载中...