码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #555 (Div. 3) A B C1(很水的题目)

时间:2019-04-29 22:36:00      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:algorithm   style   mat   name   长度   sum   char   cin   out   

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(很水的题目)

标签:algorithm   style   mat   name   长度   sum   char   cin   out   

原文地址:https://www.cnblogs.com/Staceyacm/p/10793279.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!