C 谁是神箭手
简单的推一下前几次a,b分别赢的概率,然后发现,做个除法,实际上就是比a和(1-a)*b大小
#include<bits/stdc++.h>
using namespace std;
int main(){
std::ios::sync_with_stdio(false);
double a,b;
cin>>a>>b;
a=(double)1.0*a/100;
b=(double)1.0*b/100;
if(a>(1-a)*b) cout<<"MWH"<<endl;
else if(a<(1-a)*b) cout<<"CSL"<<endl;
else cout<<"equal"<<endl;
return 0;
}
E Applese的超能力
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m;
int main(){
std::ios::sync_with_stdio(false);
// bool flag=true;
ll cnt;
cin>>n>>m;
if(n!=1&&m==1) {cout<<"No"<<endl;}
else if(n==1) {cout<<"Yes"<<endl;}
else{
cnt=n;
while(cnt>=m){
cnt=cnt/m+cnt%m;
}
if(cnt==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
F BFS
这里介绍了一个查找字串的方法,string.find()
#include<bits/stdc++.h>
using namespace std;
#define maxn 200
string ss;
int main(){
std::ios::sync_with_stdio(false);
cin>>ss;
int len=ss.length();
for(int i=0;i<len;i++){
if(ss[i]>='A'&&ss[i]<='Z'){
ss[i]+=32;
}
}
string s="bob";
int pos=ss.find(s);
cout<<pos<<endl;
return 0;
}
G 分苹果
一个01背包问题,求背包容量为sum/2的最大载物量。
开始maxn定义小了,一直在WA。。应为那个dp[maxn],那个maxn是所有苹果的重量和,开始我写成了100。
#include<bits/stdc++.h>
#define maxn 200010
using namespace std;
int n,ans=0;
int dp[maxn],w[maxn];
int main(){
std::ios::sync_with_stdio(false);
cin>>n;
for(int i=0;i<n;i++){
cin>>w[i];
ans+=w[i];
}
//背包容量为tmp
for(int i=0;i<n;i++){
for(int j=ans/2;j>=w[i];j--){
dp[j]=max(dp[j],dp[j-w[i]]+w[i]);
}
}
cout<<dp[ans/2]<<" "<<ans-dp[ans/2]<<endl;
return 0;
}
I 新建 Microsoft Office Word 文档
维护一个set,把删除的数放入set容器中。
如果是new的话就从容器中把该数删除,如果是Delete的话,先寻找这个数在不在set中,如果在set中,那么显示fail,如果不在,那么就插入这个数。
#include<bits/stdc++.h>
using namespace std;
set<int> s;
char op[20];
int n;
int main(){
std::ios::sync_with_stdio(false);
cin>>n;
for(int i=0;i<n;i++){
s.insert(i+1);
}
while(n--){
cin>>op;
if(op[0]=='N'){ //新增
cout<<*s.begin()<<endl;
s.erase(s.begin()); //erase后会自动前移
}
else{ //删除
int x;
cin>>x; //cin的读入方式遇到回车或者空格暂停
if(s.find(x)==s.end()){
cout<<"Successful"<<endl;
s.insert(x);
}
else{
cout<<"Failed"<<endl;
}
}
}
return 0;
}