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选上。 |
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
B. Continued Fractions
模拟大数据,注意溢出。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }