每太整明白这个spj
查看原帖
每太整明白这个spj
315205
Kniqht楼主2023/8/26 15:58

代码70分,好像无法拿到只判断合法性的分啊,是不是我代码的问题。但是下载数据输出全是0/1啊。怎么得到剩下30分?

#include<bits/stdc++.h>
#define int long long
#define ll long long
#define ld long double
using namespace std;
const int N=2e5+10;
int T,p;ll inv[N];
bool prime(int x){
	int sq=sqrt(x);
	for(int i=2;i<=sq;i++)
		if(!(x%i)) return false;
	return true;
}
signed main(){
	scanf("%lld%lld",&T,&p);
	while(p--){
		int n;
		scanf("%lld",&n);
		if(T==1){
			if(n&1){
				printf("0\n");
				continue;
			}
			printf("2 %lld ",n);
			for(int i=1;i<n;i++){
				if(i&1) printf("%lld ",i);
				else printf("%lld ",n-i); 
			} 
			printf("\n");
		}
		else{
			if(n==1||(n>4&&!prime(n))) printf("0\n");
			else if(n==2) printf("2 1 2\n");
			else if(n==4) printf("2 1 3 2 4\n");
			else{
				inv[0]=inv[1]=1;
				for(int i=2;i<=n;i++) inv[i]=(ll)(n-n/i)*inv[n%i]%n;
				printf("2 1 2 ");
				for(int i=3;i<n;i++) printf("%lld ",1+inv[i-1]);
				printf("%lld\n",n);
			}
		}
	}
    return 0;   
}
2023/8/26 15:58
加载中...