A. Strange Addition 

 题目链接:http://codeforces.com/problemset/problem/305/A

 题目意思:给出一个序列,需要从中选择一些数,这些数需要满足:任意两个数,这两个数的每一对应位上(即个位对个位,十位对十位 ......),至少存在一个 0。求最多选出多少个数?  数据范围是(0 ~ 100)

思路: 由数据范围 最多的个数是4 个,对于特殊的 100和0 与任何数成对都满足条件,所以只要存在就要选上。为满足最多,因为x0 可以与 x 同时存在,但不可以与xy(y!= 0)同时存在, 接下来 选择x0型的和x型的,如果存在就选上。接下来就是要判断是否选上xy(y!= 0)型的。因为不知道xy型出现的位置,可以用一个变量z记录最后出现的xy型的数。按顺序判断完后,在判断是否有x0型的或x型的存在。如果不存在,就将z选上。

 1 #include<cmath>
 2 #include<cstdio>
 3 #include<vector> 
 4 #include<cstring>
 5 #include<iostream>
 6 #include<algorithm>
 7 
 8 using namespace std;
 9 vector<int>a;
10 int main()
11 {
12     int n , q;
13     scanf("%d",&n);
14     int flag = 0 , tmp = 0, cnt = 0 , ans = 0 , k = 0 , p = 0 , z = 0;
15     for(int i = 0;i < n;i ++)
16     {
17         scanf("%d",&q);
18         if(q == 100 && flag != 1)
19         {
20             a.push_back(q);
21             flag = 1;
22             ans ++;
23         }
24         else if(q == 0 && tmp != 1)
25         {
26             a.push_back(q);
27             tmp = 1;
28             ans ++;
29         }
30         else if(q % 10 == 0 && cnt != 1 && q >= 10 && q < 100)
31         {
32             a.push_back(q);
33             cnt = 1;
34             ans ++;
35         }
36         else if(k != 2)
37         {
38             if(q < 10)
39             {
40                 k = 2;
41                 ans ++;
42                 a.push_back(q);    
43             } 
44             else
45             {
46                k = 1;
47                z = q;
48             } 
49             
50         }
51     }
52     if(cnt == 0 && z != 0 && k != 2)
53     {
54         a.push_back(z);
55         ans ++;
56     }
57     printf("%d\n",ans);
58     for(int i = 0;i < ans - 1;i ++)
59     {
60         printf("%d ",a[i]);
61     }
62         printf("%d\n",a[ans-1]);
63     return 0;
64 }
View Code

 B. Continued Fractions

  模拟大数据,注意溢出。

 1 #include<cmath>
 2 #include<cstdio>
 3 #include<vector> 
 4 #include<cstring>
 5 #include<iostream>
 6 #include<algorithm>
 7 
 8 using namespace std;
 9 typedef long long ll;
10 
11 int main()
12 {
13     ll p , q , a;
14     int n , flag = 0;
15     cin>>p>>q>>n;  
16 //    cout<<p<<q<<endl;
17     for(int i = 0;i < n;i ++)
18     {
19         cin>>a;
20         if(q <= 0 || a > ( p/q ))//当q 为0要跳出循环
21         {
22             flag = 1;
23             break;
24         }
25         p = p - a * q;    //  乘p 模拟 
26     //    cout<<p<<endl;
27         swap(p,q);
28     }
29     if(flag != 1)
30     {
31         if(q == 0)
32           printf("YES\n");
33         else
34           printf("NO\n");
35     }
36     else
37       printf("NO\n");
38     return 0;
39 }
View Code