EOJ Monthly 2020.7 Sponsored by TuSimple
程序员文章站
2022-03-11 23:49:13
传送门A. 打字机解题思路:只有两种操作,结果要么产生a,要么产生ab,那么如果是通过操作可以得到的字符串b的数量必然要小于a,因此当b的数量大于a时就打印“Dead Fang”;满足上一条件情况下我们来考虑只通过操作一能得到的字符串必然是纯a字符串,此时n1=len,为“Happy Fang",只通过操作二得到的字符串首先a和b的数量必然相等,且对最后一个以b结尾的前缀都有ab数量相等,此时也是"Happy Fang",否则”Sad Fang"#pragma optimize(3)#pragma...
传送门
A. 打字机
解题思路:只有两种操作,结果要么产生a,要么产生ab,那么如果是通过操作可以得到的字符串b的数量必然要小于a,因此当b的数量大于a时就打印“Dead Fang”;满足上一条件情况下我们来考虑只通过操作一能得到的字符串必然是纯a字符串,此时n1=len,为“Happy Fang",只通过操作二得到的字符串首先a和b的数量必然相等,且对最后一个以b结尾的前缀都有ab数量相等,此时也是"Happy Fang",否则”Sad Fang"
#pragma optimize(3)
#pragma optimize(2)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<stack>
using namespace std;
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
string s;
int t;
cin>>t;
while(t--){
cin>>s;
if(s[0]=='b'){cout<<"Dead Fang"<<endl;continue;}
int len=s.length(),n1=0,n2=0,flag=0,tt=0,tk=0;
for(int i=len-1;i>=0;i--){if(s[i]=='b'){tt=i;break;}}
for(int j=0;j<len;j++){
if(s[j]=='a')n1++;
else if(s[j]=='b'){
n2++;
if(n2>n1){flag=1;break;}
}
if(j==tt&&n1==n2)tk=1;
}
if(flag){cout<<"Dead Fang"<<endl;}
else if(tk||n1==len)cout<<"Happy Fang"<<endl;
else cout<<"Sad Fang"<<endl;
}
return 0;
}
B. 线上考试
解题思路:单选题的提交次数最大值和多选题的提交次数最大值取max,单选题的最大值很容易得出,就是选项数量最大值,多选题提交次数最大值为2*选项数-1,二者取max后即得最小提交次数
#pragma optimize(3)
#pragma optimize(2)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<stack>
#include<cmath>
using namespace std;
typedef long long ll;
const int mod=1e8;
int max(int a,int b)
{
return a>b?a:b;
}
int quick_pow(int x,int y)
{
int ans=1;
while(y){
if(y&1)ans=(ans*x);
x=(x*x);
y>>=1;
}
return ans;
}
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t,num,n1=0,n2=0;
cin>>t;
char ch;
while(t--){
cin>>ch>>num;
if(ch=='S'){
n1=max(n1,num);//每次更新单选最大值
}
if(ch=='M'){
n2=max(n2,quick_pow(2,num)-1);//每次更新多选最大值
}
}
cout<<max(n1,n2)<<endl;
return 0;
}
本文地址:https://blog.csdn.net/fusu123456789/article/details/107424458
上一篇: 包公用铡刀做判决,为何古人不觉得残忍反而受欢迎呢?
下一篇: linux mysql 数据库复制