2020年04月25日我的賽

A - Romajiios

題意:本題比較簡單,給你一個字符串,要你判斷字符串中的每個輔音字符後面是否有一個元音字符。spa

題解:簡單簽到題,模擬便可。.net

代碼:code

#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度,方向任意的狀況下,可否造成高度遞減排列。blog

題解:本題是一個簡單題,咱們令num爲第一個矩形的中兩條邊中的最大值,以後咱們很少更新num的值,遍歷剩下的輸入序列,num取以後的每個矩形的兩條邊中小於上一個num的值而且最接近num的值,若是整個序列的矩形否能找到,則咱們能達到題目的要求,反之,不能。排序

代碼:ci

#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是否成立來判斷所選的兩個字母是否符合位置的相關要求。get

代碼:string

#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;
}
相關文章
相關標籤/搜索