A: http://codeforces.com/contest/1157/problem/A
题意:每次加到10的整数倍之后,去掉后面的0,问最多有多少种可能。
1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 #include <string> 5 #include <set> 6 7 using namespace std; 8 9 int main() 10 { 11 ios::sync_with_stdio(false); 12 cin.tie(0); 13 cout.tie(0); 14 15 int n; 16 set<int> si; 17 while(cin>>n){ 18 si.clear(); 19 si.insert(si.end(),n); 20 while(n!=1){ 21 n++; 22 while(n%10==0){ 23 n/=10; 24 } 25 si.insert(si.end(),n); 26 } 27 n=2; 28 si.insert(si.end(),n); 29 while(n!=1){ 30 n++; 31 while(n%10==0){ 32 n/=10; 33 } 34 si.insert(si.end(),n); 35 } 36 cout<<si.size()<<endl; 37 } 38 return 0; 39 }
B: http://codeforces.com/contest/1157/problem/B
题意:有一个很长的字符串,和1-9之间数字的映射关系。问修改其中一段得到的最大的串是什么。(可以进行0次或1次修改)
#include <iostream> #include <algorithm> #include <vector> #include <string> #include <set> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; string s1; int mapp[9]; while(cin>>n){ cin>>s1; string s3(s1); for(int i=0;i<9;i++){ cin>>mapp[i]; } for(int j=0;j<s1.size();j++){ string s2(s1); for(int i=j;i<s1.size();i++){ char t=mapp[s1[i]-'1']+'0'; if(t>=s1[i]){ s2[i]=mapp[s1[i]-'1']+'0'; }else{ break; } } if(s2>s3) s3=s2; } cout<<s3<<endl; } return 0; }