QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#933789#9078. Greatest Common DivisorEuphoria_#AC ✓89ms4608kbC++142.4kb2025-03-14 09:28:182025-03-14 09:28:19

Judging History

This is the latest submission verdict.

  • [2025-03-14 09:28:19]
  • Judged
  • Verdict: AC
  • Time: 89ms
  • Memory: 4608kb
  • [2025-03-14 09:28:18]
  • Submitted

answer

#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pii std::pair<int,int>
#define vint std::vector<int>
#define vpair std::vector<pii>
#define debug(...) fprintf(stderr,##__VA_ARGS__)

template<typename T>
void read(T &x){
	x=0;
	int f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9') x=x*10+(int)(c-'0'),c=getchar();
	x*=f;
}

std::stack<char>st;
template<typename T>
void print(T x){
	if(x==0) putchar('0');
	if(x<0) putchar('-'),x=-x;
	while(st.size()) st.pop();
	while(x) st.push((char)('0'+x%10)),x/=10;
	while(st.size()) putchar(st.top()),st.pop();
}

template<typename T>
void printsp(T x){
	print(x),putchar(' ');
}

template<typename T>
void println(T x){
	print(x),putchar('\n');
}

template<typename T,typename I>
bool chkmin(T &a,I b){
	if(a>b) return a=b,1;
	return 0;
}

template<typename T,typename I>
bool chkmax(T &a,I b){
	if(a<b) return a=b,1;
	return 0;
}

template<typename T,typename I>
void addedge(std::vector<I>*vec,T u,T v){
	vec[u].push_back(v);
}

template<typename T,typename I,typename K>
void addedge(std::vector<K>*vec,T u,T v,I w){
	vec[u].push_back({v,w});
}

template<typename T,typename I>
void addd(std::vector<I>*vec,T u,T v){
	addedge(vec,u,v),addedge(vec,v,u);
}

template<typename T,typename I,typename K>
void addd(std::vector<K>*vec,T u,T v,I w){
	addedge(vec,u,v,w),addedge(vec,v,u,w);
}

bool Mbe;

const int inf=1e18,MOD1=998244353,MOD2=1e9+7;

int T;

const int maxn=1e5+10;

int a[maxn];

bool Men;

signed main(){
	debug("%.6lfMB\n",(&Mbe-&Men)/1048576.0);
	read(T);
	int id=0;
	while(T--){
		id++;
		int n;
		read(n);
		for(int i=1;i<=n;i++) read(a[i]);
		std::sort(a+1,a+n+1);
		int d=0;
		for(int i=2;i<=n;i++) d=std::__gcd(d,a[i]-a[i-1]);
		int dd=0;
		for(int i=1;i<=n;i++) dd=std::__gcd(dd,a[i]);
		if(dd>1){
			std::cout<<"Case "<<id<<": "<<0<<"\n";
			continue;
		}
		// debug("d=%lld\n",d);
		if(d==0){
			std::cout<<"Case "<<id<<": "<<1<<"\n";
			continue;
		}
		int ans=inf;
		for(int i=2;i*i<=d;i++){
			if(d%i!=0) continue;
			int del=a[1]%i;
			chkmin(ans,i-del);
			del=a[1]%(d/i);
			chkmin(ans,d/i-del);
		}
		int del=a[1]%d;
		if(d!=1)chkmin(ans,d-del);	
		if(ans==inf) ans=-1;
		std::cout<<"Case "<<id<<": "<<ans<<"\n";
	}
	debug("%.6lfms\n",1e3*clock()/CLOCKS_PER_SEC);
}

这程序好像有点Bug,我给组数据试试?

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3712kb

input:

3
1
2
5
2 5 9 5 7
5
3 5 7 9 11

output:

Case 1: 0
Case 2: -1
Case 3: 1

result:

ok 9 tokens

Test #2:

score: 0
Accepted
time: 0ms
memory: 3840kb

input:

6
1
1
3
1 1 1
3
2 2 2
3
1 2 3
3
1 3 5
3
1 10 19

output:

Case 1: 1
Case 2: 1
Case 3: 0
Case 4: -1
Case 5: 1
Case 6: 2

result:

ok 18 tokens

Test #3:

score: 0
Accepted
time: 89ms
memory: 4608kb

input:

100
1
1
1
2
5
879961169 879961169 879961169 879961169 152615033
8
876139349 292671665 876139349 876139349 876139349 876139349 876139349 876139349
10
825359939 825359939 825359939 825359939 825359939 825359939 594330487 825359939 825359939 825359939
5
985688421 985688421 718069623 985688421 985688421...

output:

Case 1: 1
Case 2: 0
Case 3: 1
Case 4: 1
Case 5: 1
Case 6: 0
Case 7: 1
Case 8: -1
Case 9: -1
Case 10: 0
Case 11: 0
Case 12: 0
Case 13: 1
Case 14: 0
Case 15: 45
Case 16: 11
Case 17: 1
Case 18: -1
Case 19: -1
Case 20: 855585752
Case 21: 1982
Case 22: 260
Case 23: 0
Case 24: 0
Case 25: 0
Case 26: 0
Case...

result:

ok 300 tokens

Extra Test:

score: 0
Extra Test Passed