蒟蒻能写几道水题题解吧
A
根据题意模拟,都还活着就加上两人攻击力和,同时小于等于0,直接跳出,还有一方存活加上10*攻击力退出
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int a,b,h,k;
long long ans=0;
int main(){
cin>>a>>h>>b>>k;
while(a||b){
ans+=(a+b);
h-=b;k-=a;
if(h<=0 && k<=0) break;
if(h<=0){ans+=b*10;break;}
if(k<=0){ans+=a*10;break;}
} cout<<ans<<endl;return 0;
}
D
读懂题意就很好做
建立一个后缀和数组,顺便记录位置
然后建立一个ans数组
记录sum[n-k+1~n]-sum[n+1]的满足感羞耻度和起始位置(起始位置即i-k+1)
再记录sum[i-k+1]-sumi
再按照题意排序即可
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,k;
const int maxn=1e5+10;
struct node{
long long a,b;
}e[maxn];
struct nod{
long long a,b,p;
}sum[maxn],ans[maxn];
bool cmp(nod x,nod y){//按照题意写cmp函数
if(x.a!=y.a) return x.a>y.a;
if(x.b!=y.b) return x.b<y.b;
return x.p<y.p;
}
int main(){
ios::sync_with_stdio(0);
cin>>n>>k;
for(int i=1;i<=n;++i) cin>>e[i].a;
for(int i=1;i<=n;++i) cin>>e[i].b;
for(int i=n;i>=1;--i){//后缀数组
sum[i].a=sum[i+1].a+e[i].a;
sum[i].b=sum[i+1].b+e[i].b;
sum[i].p=i;
}int top=0;
for(int i=0;i<k;++i){//记录sum[n-k+1~n]-sum[n+1]的满足感羞耻度和起始位置(起始位置即i-k+1)
ans[++top].a=sum[n-i].a-sum[n+1].a;
ans[top].b=sum[n-i].b-sum[n+1].b;
ans[top].p=n-i;
}
for(int i=n-1;i-k+1>=1;--i){//再记录sum[i-k+1]-sum[i](k<=i<=n)
ans[++top].a=sum[i-k+1].a-sum[i+1].a;
ans[top].b=sum[i-k+1].b-sum[i+1].b;
ans[top].p=i-k+1;
}
sort(ans+1,ans+1+top,cmp);
cout<<ans[1].p<<endl;
return 0;
}
F
(乱提一嘴)其实如果涂完有点像国际象棋的棋盘,左上角为黑色,右下角也为黑色,共64个格子
但是这道题的格子数=n*m
两个人轮着涂,采取最优策略,两个人都不会涂到相同颜色旁边,除非迫不得已
因为小红先手
当格子数为奇数的时候小红赢
当格子数为偶数的时候小紫赢
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,m;
int main(){
cin>>n>>m;
if((long long)(n*m)%2) cout<<"akai";
else cout<<"yukari";
return 0;
}
J
读入
输出时忽略最后三个字符即可
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
string s;
int main(){
getline(cin,s);
int len=s.length()-3;
for(int i=0;i<len;++i) cout<<s[i];
return 0;
}