A - tcdr
处理字符串简单题,题目要求去除字符串中的a,e,i,o,u即可
#include<iostream>
using namespace std;
int main()
{
string s;cin>>s;
for(int i=0;i<s.length();i++)
{
if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u')
continue;
cout<<s[i];
}
}
B - The Middle Day
给出M个月份,分别给出每个月多少天,求出一年中中间的一天,数据给出的总天数一定是奇数
样例
12
31 28 31 30 31 30 31 31 30 31 30 31
例如一年365天,中间天数为7月2日,输出 7 2
#include<iostream>
using namespace std;
int main()
{
int M;cin>>M;
int D[M+2];
int ans=0;
for(int i=1;i<=M;i++) cin>>D[i],ans+=D[i];
ans=(ans+1)/2;
int cnt=0;
for(int i=1;i<=M;i++)
{
if(cnt+D[i]>=ans)
{
cout<<i<<" "<<ans-cnt<<endl;
break;
}
cnt+=D[i];
}
}
C - Flavors
给出不同口味的不同数值,题目要求挑选其中两种,输出最大的美味值
如果选中的两个口味相同,那么美味值为其中较大的加上其中较小的/2
如果选中的两个口味不同,那么美味值为所有不同口味中最大的两个相加
那么只需要记录每种口味最大的和第二大的即可
Sample Input 1
4
1 4
2 10
2 8
3 6
Sample Output 1
16
过程:
输入1,4
Max[1]=4
Sec[1]=0
输入2,10
Max[2]=10
Sec[2]=0
输入2,8
Max[2]=10
Sec[2]=8
输入3,6
Max[3]=6
Sec[3]=0
最后,如果选择两个口味相同的,那么最大值是选择2号时取得ans=14
如果两个口味不同,最大值为选择2,3号时取得ans=16
最后更新ans=max(14,16)=16.
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
signed main()
{
int N;cin>>N;
int Max[N+2]={0};
int Sec[N+2]={0};
for(int i=1;i<=N;i++)
{
int f,s;cin>>f>>s;//对于每一种口味取最大值和次大值
if(s>Max[f]){
Sec[f]=Max[f];Max[f]=s;
}
else if(s<=Max[f]&&s>Sec[f]) Sec[f]=s;
}
int ans=0;
for(int i=1;i<=N;i++)
{
ans=max(Max[i]+Sec[i]/2,ans);//处理相同口味
}
sort(Max+1,Max+1+N);
ans=max(Max[N]+Max[N-1],ans);//处理不同口味
cout<<ans<<endl;
}
E - Prerequisites
定义vis数值标记每一本书是否读过
接下来递归、标记、输出即可
#include<iostream>
#include<vector>
const int MAXN=2e5+5;
int N;
int vis[MAXN+2]={0};
using namespace std;
std::vector< std::vector<int> >q(MAXN+2);
//二维vector存放每本书的需求
void read(int x)
{
for(auto v:q[x])
{
if(!vis[v]) vis[v]=1,read(v),cout<<v<<" ";
//如果没读过,标记为读过,进入递归,输出这本书
}
if(!vis[x]) cout<<x<<" ";
vis[x]=1;//标记为读过这本书
}
int main()
{
cin>>N;
for(int i=1;i<=N;i++)
{
int n,p;cin>>n;
while(n--)
cin>>p,
q[i].push_back(p);
}
for(auto x:q[1])//遍历第一本书的需求
{
read(x);
}
}