所有测试点都对但0分!!!!!求助!!
查看原帖
所有测试点都对但0分!!!!!求助!!
520658
xht12138楼主2023/11/15 19:20

代码如下

#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1e7+9;
int T;
int vvis[Maxn],vis2[Maxn],cnt = 1,hht[Maxn];
bool check(int x)
{
	while(x!=0) {
		if(x%10==7) return 1;
		x = x/10;
	}

	return 0;
}
void iinit()
{
	for(int i = 1;i <= Maxn;i++)
	{
        if(vvis[i] == 1) continue;
		if(check(i))
		{
			for(int j = 1;i*j <= Maxn;j++) vvis[i*j] = 1;
		}
		else 
		{
			vis2[cnt] = i;
			hht[i] = cnt;
			cnt++;
		}
	}

}

int main()
{
//	freopen("1.in","r",stdin);
//	freopen("1.out","w",stdout);
	cin>>T;
	iinit();
	
	for(int i = 1;i <= T;i++)
	{
		int x; cin>>x;
		if(vvis[x] == 1){ cout<<-1<<endl; continue;}
		cout<<vis2[hht[x]+1]<<endl;
	}
	
	return 0;
}

然后很神奇的,把输入和初始化换一下位置,其他什么都不变

#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1e7+9;
int T;
int vvis[Maxn],vis2[Maxn],cnt = 1,hht[Maxn];
bool check(int x)
{
	while(x!=0) {
		if(x%10==7) return 1;
		x = x/10;
	}

	return 0;
}
void iinit()
{
	for(int i = 1;i <= Maxn;i++)
	{
        if(vvis[i] == 1) continue;
		if(check(i))
		{
			for(int j = 1;i*j <= Maxn;j++) vvis[i*j] = 1;
		}
		else 
		{
			vis2[cnt] = i;
			hht[i] = cnt;
			cnt++;
		}
	}

}

int main()
{
//	freopen("1.in","r",stdin);
//	freopen("1.out","w",stdout);
	
	iinit();
	cin>>T;
	for(int i = 1;i <= T;i++)
	{
		int x; cin>>x;
		if(vvis[x] == 1){ cout<<-1<<endl; continue;}
		cout<<vis2[hht[x]+1]<<endl;
	}

return 0;

}


就AC了,不然全WA
2023/11/15 19:20
加载中...