【牛客】牛客练习赛16(未完)

Posted on 2018-05-02 21:06  som_nico  阅读(130)  评论(0编辑  收藏  举报

A  字典序最大的子序列

题意:给定字符串s,s只包含小写字母,请求出字典序最大的子序列。(看例子就能看明白)

思路:从这个字符串a后面开始比较,先把最后一个字母存进s,然后那那s中最新的一个元素跟a中上一个进行比较,如果a不比s小,则存入s,并把这个看做新哒~

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
char s[100007];
int main() 
{

    string a;
    while(cin>>a){
        int i,t;
        s[0]=a[a.length()-1];
        t=0;
       // cout<<a.length()<<endl;
        for(i=a.length()-2;i>=0;i--){
            if(a[i]>=s[t]){
                s[++t]=a[i];

            }
        }
        for(;t>=0;t--){
            cout<<s[t];
        }
        cout<<endl;
    }
    return 0;
}

 

漂亮的树

思路:对每棵树的高度减去下标,看哪个高度出现次数最多就保留

#include<bits/stdc++.h>
#define pp 1e5
using namespace std;
int n,a[100010],f[1000010],ansn;
int main(){
    cin>>n;
    for (int i=1;i<=n;i++) cin>>a[i];
    for (int i=1;i<=n/2;i++) a[i]-=i;
    for (int i=n;i>n/2;i--) a[i]-=(n-i+1);
    for (int i=1;i<=n;i++)f[a[i]+100000]++;
    for (int i=0;i<=pp*3;i++) ansn=max(ansn,f[i]);
    cout<<n-ansn<<endl;
    return 0;
}