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;
}
原文地址:https://www.cnblogs.com/Staceyacm/p/10793279.html