码迷,mamicode.com
首页 > 其他好文 > 详细

matrix_2015_1 138 - ZOJ Monthly, January 2015

时间:2015-01-12 00:08:09      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3844

 

第一个,n个数,每次操作最大数和最小数都变成他们的差值,最后n个数相同时输出此时的值,暴力跑。

 

技术分享
 1 #include<cstdio>
 2 int main(){
 3     int t,n,a[16];
 4     while(~scanf("%d",&t)){
 5         while(t--){
 6             scanf("%d",&n);
 7             for(int i=0;i<n;i++){
 8                 scanf("%d",&a[i]);
 9             }
10             while(true){
11                 int bid=0,sid=0;
12                 for(int i=1;i<n;i++){
13                     if(a[bid]<a[i]) bid=i;
14                     if(a[sid]>a[i]) sid=i;
15                 }
16                 if(a[bid]==a[sid]){
17                     printf("%d\n",a[sid]);
18                     break;
19                 }
20                 a[bid]=a[sid]=a[bid]-a[sid];
21             }
22         }
23     }
24     return 0;
25 }
View Code

 

 

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5440

第二个,n个数,每次操作可以任意选两个数把他们变成他们gcd的值。最后问几步能都变成1,且输出每步选的数的下标。方法:先求出n个数的gcd,如果不为1,输出-1.否则一定能变成全1.变的方法是,先用第一个依次和后面的操作,直至第一个数变成1,然后再用第一个数把剩下的非1的都变掉。

 

技术分享
 1 #include<cstdio>
 2 #include<vector>
 3 using namespace std;
 4 const int M=1e5+10;
 5 typedef pair<int,int> pii;
 6 int a[M];
 7 int gcd(int a,int b){
 8     return b?gcd(b,a%b):a;
 9 }
10 vector<pii> ans;
11 int main(){
12     int n;
13     int cas=1;
14     while(~scanf("%d",&n)){
15         for(int i=1;i<=n;i++){
16             scanf("%d",&a[i]);
17         }
18         int now=a[1];
19         for(int i=2;i<=n;i++){
20             now=gcd(now,a[i]);
21         }
22         printf("Case %d: ",cas++);
23         if(now>1){
24             puts("-1");
25             puts("");
26             continue;
27         }
28         ans.clear();
29         for(int i=2;i<=n;i++){
30             int now=gcd(a[1],a[i]);
31             a[1]=a[i]=now;
32             ans.push_back(make_pair(1,i));
33             if(now==1) break;
34         }
35         for(int i=2;i<=n;i++){
36             if(a[i]==1) continue;
37             ans.push_back(make_pair(1,i));
38         }
39         int len=ans.size();
40         printf("%d\n",len);
41         for(int i=0;i<len;i++){
42             printf("%d %d\n",ans[i].first,ans[i].second);
43         }
44         puts("");
45     }
46     return 0;
47 }
View Code

 

 

 

 

 

end

matrix_2015_1 138 - ZOJ Monthly, January 2015

标签:

原文地址:http://www.cnblogs.com/gaolzzxin/p/4217278.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!