Codeforces Round #555 (Div. 3) A B C1(很水的题目)
Posted staceyacm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #555 (Div. 3) A B C1(很水的题目)相关的知识,希望对你有一定的参考价值。
A. Reachable Numbers
题意:设f(x)为 x+1 这个数去掉后缀0的数,现在给出n,问经过无数次这种变换后,最多能得到多少个不同的数。
代码
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<set> #include<map> #include<vector> #include<cmath> const int maxn=1e5+5; typedef long long ll; using namespace std; int sum=0; map<int,bool>mp; int f(int x) { if(mp[x]==true) { return 1; } //cout<<sum<<endl; sum++; mp[x]=true; //cout<<x<<" "<<mp[x]<<endl; x++; while(x%10==0) { x/=10; } return f(x); } int main() { int n; cin>>n; f(n); cout<<sum<<endl; return 0; }
B. Long Number
题意:给一个长度为n的字符串,给出 f 数组表示你可以把字符 x 变成对应的 f (x),你只能修改一段连续的子串,求修改后字典序最大的字符串。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<set> #include<map> #include<vector> #include<cmath> const int maxn=1e5+5; typedef long long ll; using namespace std; map<char,char>mp; int main() { int n; cin>>n; string str; cin>>str; char c[2]; for(int t=1;t<=9;t++) { char ss=‘0‘+t; cin>>c; mp[ss]=c[0]; } int flag=0; for(int t=0;t<n;t++) { if(mp[str[t]]>str[t]) { str[t]=mp[str[t]]; flag=1; } else if(flag==1&&mp[str[t]]<str[t]) { break; } } cout<<str<<endl; return 0; }
C1. Increasing Subsequence (easy version)
题意:给一个长度为 n 的数组,每个数不一样,每次你可以从坐边界或者右边界取一个数,要求每一次取的数都要比上一次取得数要大,求最多可以取多少个数。
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<set> #include<map> #include<vector> #include<cmath> const int maxn=1e5+5; typedef long long ll; using namespace std; vector<int>vec; int main() { int n; cin>>n; int x; for(int t=0;t<n;t++) { scanf("%d",&x); vec.push_back(x); } vector<int>::iterator it1=vec.begin(),it2=vec.end()-1; vector<char>v; int xx=0; for(int t=0;t<n;t++) { if(*it2>xx||*it1>xx) { if(*it2<*it1&&*it2>xx&&*it1>xx) { xx=*it2; v.push_back(‘R‘); it2--; } else if(*it1<*it2&&*it2>xx&&*it1>xx) { xx=*it1; v.push_back(‘L‘); it1++; } else if(*it2>xx) { xx=*it2; v.push_back(‘R‘); it2--; } else if(*it1>xx) { xx=*it1; v.push_back(‘L‘); it1++; } // cout<<xx<<endl; } } cout<<v.size()<<endl; vector<char>::iterator it=v.begin(); for(it=v.begin();it!=v.end();it++) { cout<<*it; } return 0; }
以上是关于Codeforces Round #555 (Div. 3) A B C1(很水的题目)的主要内容,如果未能解决你的问题,请参考以下文章
E Minimum Array ( Codeforces Round #555 (Div. 3) )
Codeforces Round #555 (Div. 3)[1157]题解
codeforces 555b//Case of Fugitive// Codeforces Round #310(Div. 1)
Codeforces Round # 555 (Div. 3) C2. Increasing subsequence (complicated version) (贪心)