标签:tis start ber not rip 地方 math acm esc
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 0 Accepted Submission(s): 0
1 #include<cstdio> 2 #include<cmath> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 typedef long long ll; 8 const int N=1e5+10; 9 ll a[N],b[N]; 10 ll phi[N]; 11 ll sum,cnt; 12 bool cmp(int a,int b){ 13 return a>b; 14 } 15 16 void sushu(){ //找出来素因子 17 cnt=0; 18 for(ll i=2;i<=sqrt(sum);i++){ 19 if(sum%i==0) 20 phi[cnt++]=i; 21 while(sum%i==0) 22 sum/=i; 23 } 24 phi[cnt++]=sum; //找出来的素因子存在这个数组里 25 } 26 27 int main(){ 28 int t,n; 29 ll h,num,ret,minn; 30 scanf("%d",&t); 31 while(t--){ 32 scanf("%d",&n); 33 sum=0; 34 for(int i=0;i<n;i++){ 35 scanf("%lld",&a[i]); 36 sum+=a[i]; 37 } 38 sushu(); 39 minn=1e10+10; 40 for(int j=0;j<cnt;j++){ //跑一遍所有的素因子,本来素因子就很少,不会超时 41 num=0; 42 for(int i=0;i<n;i++) 43 b[i]=a[i]; 44 for(int i=0;i<n;i++){ 45 b[i]=b[i]%phi[j]; //取余操作 46 num+=b[i]; 47 } 48 ret=0; 49 sort(b,b+n,cmp); 50 int i=0; 51 while(num>0&&i<n){ 52 ret+=phi[j]-b[i];//将补的次数(移动次数)加到ret中 53 num-=phi[j];//总数减去 54 i++; 55 } 56 minn=min(minn,ret);//找出移动次数最小的 57 } 58 printf("%lld\n",minn); 59 } 60 return 0; 61 }
太菜啦,每次都是错在一些很智障的地方上。
本来会写的题目就不多,还经常出一些智障的错误。没写对和写不出来结果是一样的。
菜哭(?_?)
今天双十一,单身狗节快乐_(:з」∠)_
A Simple Stone Game-找素因子(欧拉函数)-2017中国大学生程序设计竞赛-哈尔滨站-重现赛
标签:tis start ber not rip 地方 math acm esc
原文地址:http://www.cnblogs.com/ZERO-/p/7819884.html