一个玄学的问题
查看原帖
一个玄学的问题
271096
Semorius楼主2021/11/20 21:09

AC:

#include <bits/stdc++.h>
using namespace std;
const int SIZE = 200005;
const int Max = 10000005;
int n;
int v[10000005];
queue<int> q;

inline int rd(){
	int x = 0, f = 1;
	char ch = getchar();
	while(ch < '0' || ch > '9'){
		if(ch == '-') f = -1;
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9'){
		x = (x<<1)+(x<<3)+(ch^48);
		ch = getchar();
	}
	return x*f;
}

int main(){
//	freopen("number.in", "r", stdin);
//	freopen("number.out", "w", stdout);
	for(int i =1; i <= Max; i++){
		if(v[i]) continue;
		else{
			int x = i; bool flag = false;
			while(x){
				if(x%10 == 7){
					flag = true;
					break;
				}
				x /= 10;
			}
			if(i%7 == 0 || flag){
				v[i] = 1;
				for(int j = i*2; j <= Max; j += i){
					v[j] = 1;
				}
			}
			else{
				int now = i;
				while(v[now-1]){
					v[now-1] = i;
					now--;
				}
			}
		}
	}
//	for(int i = 1; i <= 100; i++)
//		printf("%d %d\n", i, v[i]);
	n = rd();
	for(int i = 1; i <= n; i++){
		int a = rd();
		if(v[a]) puts("-1");
		else{
			if(v[a+1] == 0) printf("%d\n", a+1);
			else printf("%d\n", v[a+1]);
		}
	}
	return 0;
}

WA0:

#include <bits/stdc++.h>
using namespace std;
const int SIZE = 200005;
const int Max = 10000005;
int n;
int v[10000005];
queue<int> q;

inline int rd(){
	int x = 0, f = 1;
	char ch = getchar();
	while(ch < '0' || ch > '9'){
		if(ch == '-') f = -1;
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9'){
		x = (x<<1)+(x<<3)+(ch^48);
		ch = getchar();
	}
	return x*f;
}

int main(){
//	freopen("number.in", "r", stdin);
//	freopen("number.out", "w", stdout);
	n = rd();
	for(int i = 1; i <= Max; i++){
		if(v[i]) continue;
		else{
			int x = i; bool flag = false;
			while(x){
				if(x%10 == 7){
					flag = true;
					break;
				}
				x /= 10;
			}
			if(i%7 == 0 || flag){
				v[i] = 1;
				for(int j = i*2; j <= Max; j += i){
					v[j] = 1;
				}
			}
			else{
				int now = i;
				while(v[now-1]){
					v[now-1] = i;
					now--;
				}
			}
		}
	}
//	for(int i = 1; i <= 100; i++)
//		printf("%d %d\n", i, v[i]);
	for(int i = 1; i <= n; i++){
		int a = rd();
		if(v[a]) puts("-1");
		else{
			if(v[a+1] == 0) printf("%d\n", a+1);
			else printf("%d\n", v[a+1]);
		}
	}
	return 0;
}

就改了读入nn的顺序,区别真的这么大吗

2021/11/20 21:09
加载中...