QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#847447#9078. Greatest Common DivisorAshleyAC ✓166ms5944kbC++172.2kb2025-01-07 23:26:342025-01-07 23:26:35

Judging History

This is the latest submission verdict.

  • [2025-01-07 23:26:35]
  • Judged
  • Verdict: AC
  • Time: 166ms
  • Memory: 5944kb
  • [2025-01-07 23:26:34]
  • Submitted

answer

/*
Look at the star
Look at the shine for U
*/
#include<bits/stdc++.h>
#define ll long long
#define PII pair<int,int>
#define sl(x) scanf("%lld",&x)
using namespace std;
const int N = 1e6+5;
const int mod = 1e9+7;
const int INF = 0x3f3f3f3f;
const double PI = acos(-1);
ll inv(ll b){if(b==1)return 1; return (mod-mod/b)*inv(mod%b)%mod;}
ll fpow(ll n,ll k){ll r=1;for(;k;k>>=1){if(k&1)r=r*n%mod;n=n*n%mod;}return r;}
ll s[N],fac[N],cnt;
int main()
{
    ll n,i,j,k,sum,t,cas = 1;
    sl(t);
    while(t--)
    {
        sl(n);
        sum = 0;
        for(i = 0;i < n;i++){sl(s[i]),sum += s[i];}
        printf("Case %lld: ",cas++);
        if(sum == n)
        {
            puts("1");
            continue;
        }
        sort(s,s+n);
        ll flag = 0;
        for(i = 0;i < n;i++)
        {
            if(s[i]%s[0]) flag = 1;
        }
        if(!flag && s[0] != 1)
        {
            puts("0");
            continue;
        }
        ll Gcd = 0;
        for(i = 1;i < n;i++)
        {
            ll dis = s[i]-s[i-1];
            if(dis == 0) continue;
            Gcd = __gcd(Gcd,dis);
        }
        if(Gcd == 1)
        {
            puts("-1");
            continue;
        }
        flag = 0;
        for(i = 0;i < n;i++)
        {
            if(s[i]%Gcd) flag = 1;
        }
 
        if(!flag)
        {
            puts("0");
            continue;
        }
        cnt = 0;
        for(i = 2;i*i <= Gcd;i++)
        {
            if(Gcd%i == 0)
            {
                fac[cnt++] = i;
                fac[cnt++] = Gcd/i;
            }
        }
        fac[cnt++] = Gcd;
        sort(fac,fac+cnt);
        ll minn = 1e18;
        ll now = 0;
        for(i = 0;i < cnt;i++)
        {
            ll temp = 0;
            for(j = 0;j < n;j++)
            {
                if(s[j]%fac[i]) temp = 1; 
            }
            if(!temp)
            {
                now = 1;
                break;
            }
        }
        if(now)
        {
            puts("0");
            continue;
        }
        for(i = 0;i < cnt;i++)
        {
            minn = min(minn,fac[i]-s[0]%fac[i]);
        }
        printf("%lld\n",minn);
    }
}

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

詳細信息

Test #1:

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

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: 1ms
memory: 5940kb

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: 166ms
memory: 5936kb

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