c/c++语言开发共享2020年04月25日个人赛

A – Romaji 题意:本题比较简单,给你一个字符串,要你判断字符串中的每一个辅音字符后面是否有一个元音字符。 题解:简单签到题,模拟即可。 代码: #include<iostream> #include<cstring> #include<algorithm> #define ll long …

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; }

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/599663.html

(0)
上一篇 2021年5月9日
下一篇 2021年5月9日

精彩推荐