zoukankan      html  css  js  c++  java
  • 2020年04月25日个人赛

    A - Romaji

    题意:本题比较简单,给你一个字符串,要你判断字符串中的每一个辅音字符后面是否有一个元音字符。

    题解:简单签到题,模拟即可。

    代码:

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #define ll long long
    using namespace std;
    int main(){
        string ptr;
        string ar="aeiou";//
        cin>>ptr;
        int f=1;
        for(int i=0;i<ptr.length();i++){
            if(ptr[i]!='n'&&ar.find(ptr[i])==-1){//辅音
                if(ar.find(ptr[i+1])!=-1){
                }else{
                    f=0;
                    break;
                }
            }
        }
        if(f==1){
            cout<<"YES"<<endl;
        }else{
            cout<<"NO"<<endl;
        }
        return 0;
    }

    B - Turn the Rectangles

    题意:本题比较简单,给你一长串长方形的长宽,要你判断在相对位置不发生改变,你可以将任意一个矩形进行旋转,角度为90度,方向任意的情况下,能否形成高度递减排列。

    题解:本题是一个简单题,我们令num为第一个矩形的中两条边中的最大值,之后我们不多更新num的值,遍历剩下的输入序列,num取之后的每一个矩形的两条边中小于上一个num的值并且最接近num的值,如果整个序列的矩形否能找到,则我们能达到题目的要求,反之,不能。

    代码:

    #include<iostream>
    #include<cstring>
    #include<set>
    #include<algorithm>
    #define ll long long
    using namespace std;int main(){
        ll n;
        cin>>n;
        ll a,b;
        cin>>a>>b;
        int num=max(a,b);
        ll x,y;
        int f=1;
        for(int i=1;i<n;i++){
            cin>>x>>y; 
            if(x<=num&&y<=num){
                num=max(x,y);
            }else{
                if(x<=num){
                    num=x;
                } else if(y<=num){
                    num=y;
                }else{
                    f=0;
                }
            }
        }
        if(f==0){
            cout<<"NO"<<endl;
        }else{
            cout<<"YES"<<endl;
        }
        return 0;
    } 

    D - Stages

    题意:本题也是一个简单题,也是一个比较有趣的题,大概意思就是说该你一个长度为len的字符串,从中选出k个组成字符串s,要求s中的字符不能重复,且它们的和最小(“和”等于每个字母子在字母表中的排序位置的序号有关,比如'a'=1,'z'=26);

    题解:这里,我们可以先将输入的字符按升序排序,这样就保证了选出的字符的和是最小的,然后根据:(ptr[i]-t)>1是否成立来判断所选的两个字母是否符合位置的相关要求。

    代码:

    #include<iostream>
    #include<cstring>
    #include<set>
    #include<algorithm>
    #define ll long long
    using namespace std;
    int main(){
        int n,k;
        char ptr[100],c;
        cin>>n>>k;
        cin>>ptr;
        sort(ptr,ptr+n);
        ll sum=(ptr[0]-'a'+1);
        char t=ptr[0];
        int num=1;
        for(int i=1;i<n;i++){
            if(num==k){
                break;
            }
            if(ptr[i]-t>1){
                t=ptr[i];
                sum=sum+(ptr[i]-'a'+1);
                num++;
            }
        }
        if(num==k){
            cout<<sum<<endl;
        }else{
            cout<<-1<<endl;
        }
    //    cout<<ptr;
        return 0;
    } 

    E - Planning The Expedition

    题意:这一题就比较有意思了,要你去分食物,比较奇怪的是每一个人它们只吃一种食物,总共有m袋,n个人,每天吃一袋,问最多能吃几天?

    题解:这是一个模拟题,你只要把这个分食物的过程模拟出来就可以了,我们该开始时候一袋一袋分,这样就可以保证每个人只吃一种食物,人后在两袋两袋的分、三袋三袋的分,一直进行到最后即可。

    代码:

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #define ll long long
    using namespace std;
    int main(){
        int n,m,t;
        cin>>n>>m/*食品袋子的总数量*/;
        int num[120]={0};
        int re=-1;
        for(int i=0;i<m;i++){
            cin>>t;
            num[t]++;
            re=max(re,t);
        }
        int temp[100]={0};
        int ans=0;
        for(int i=1/*每一个人所得到的数量*/;i*n<=m;i++){
            int tt=1;/*第  t 种*/
            for(int r=1;r<=100;r++) temp[r]=num[r];
            for(int j=1;j<=n;j++){//分到第  j 个人 
                while(temp[tt]<i){
                    tt++;
                    if(tt>re) break;
                }
                temp[tt]=temp[tt]-i;
            }
            if(tt<=re)
                ans=max(ans,i);
        }
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    最方便建立进程池,线程池的方法
    python并发编程之多线程
    Cpython解释器支持的进程与线程
    进程与线程理论基础
    爬虫关于高性能方面
    Python中 and,or 的计算规则
    存储库之——MongoDB
    解析库之——beautifulsoup
    破解极验滑动验证码
    爬取拉勾网示例
  • 原文地址:https://www.cnblogs.com/blogxsc/p/12805215.html
Copyright © 2011-2022 走看看