1 solutions
-
0
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