蒟蒻能写几道水题题解吧
根据题意模拟,都还活着就加上两人攻击力和,同时小于等于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; }
读懂题意就很好做
建立一个后缀和数组,顺便记录位置
然后建立一个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; }
(乱提一嘴)其实如果涂完有点像国际象棋的棋盘,左上角为黑色,右下角也为黑色,共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; }
读入
输出时忽略最后三个字符即可
#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; }