1 solutions

  • 0
    @ 2023-12-3 21:35:25

    C :

    #include<stdio.h>
    int main()
    {
        int a[100000];
        int N,j,term,l=50;
        while(scanf("%d",&N)==1)
        {
        for(int i=0;i<N;i++)
        {
            scanf("%d",&a[i]);
        }
    
        for(int i=0;i<N;i++)
        {
            for(j=i+1;j<N;j++)
            {
                if(a[i]<a[j])
                {
                    term=a[i];
                    a[i]=a[j];
                    a[j]=term;
                }
            }
        }
        int y[100000];
        for(int i=0;i<N-1;i++)
        {
            y[i]=a[i]-a[i+1];
        }
        int term1,term2;
        for(int i=1;i<N-1;i++)
        {
            if(y[i]!=0)
            {
            if(y[0]<y[i])
            {
                term1=y[0];
                y[0]=y[i];
                y[i]=term1;
            }
            if(y[i]!=0)
            {
            for(;y[0]%y[i]!=0;)
            {
                term2=y[0]%y[i];
                y[0]=y[i];
                y[i]=term2;
            }
            y[0]=y[i];
            }
            }
        }
        int k,m;
        if(N%2==1)
        k=a[(N-1)/2];
        else
        {
            m=(a[N/2-1]-a[N/2])/y[0];
            if(m%2==1)
            k=a[N/2]+(m+1)*y[0]/2;
            else
            k=a[N/2]+m*y[0]/2;
        }
        int sum=0,s,t;
        for(int i=0;i<N;i++)
        {
            if(a[i]<k)
            {
                t=k;
                s=a[i];
            }
            else
            {
                t=a[i];
                s=k;
            }
            sum=sum+(t-s)/y[0];
        }
        printf("%d %d\n",y[0],sum);
        }
        return 0;
    }
    
    

    C++ :

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    int gcd(int a,int b)
    {
    	if(!b) return a;
    	return gcd(b,a % b);
    }
    
    int main()
    {
    	int a[1010], n;
    	//freopen("trans.in","r",stdin);
    	//freopen("trans.out","w",stdout);
    	while(scanf("%d",&n) != EOF) {
    		for(int i = 1; i <= n; i ++)
    			scanf("%d",&a[i]);
    		sort(a + 1,a + n + 1);
    		int X = 0;
    		for(int i = 2; i <= n; i ++)
    			X = gcd(X,a[i] - a[i - 1]);
    		long long minx = 0;
    		int mid = (n + 1) / 2;
    		for(int i = 1; i < mid; i ++)
    			minx += (a[mid] - a[i]) / X;
    		for(int i = mid + 1; i <= n; i ++)
    			minx += (a[i] - a[mid]) / X;
    		printf("%d %lld\n",X,minx);
    	}
    	return 0;
    }
    
    
    • 1

    Information

    ID
    1319
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    (None)
    # Submissions
    0
    Accepted
    0
    Uploaded By