A. Yet Another String Game
#include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof a) #define ll long long int using namespace std; string s; int main() { int T; cin>>T; while(T--) { cin>>s; int flag = 1; for(int i=0;i<s.length();i++) { if(flag == 1) { if(s[i]!='a') { cout<<"a"; } else{ cout<<"b"; } flag = 0; } else{ if(s[i]!='z') { cout<<"z"; } else{ cout<<"y"; } flag = 1; } } cout<<endl; } }
B. The Great Hero
题意:英雄打怪兽,每只怪兽有a[i]的攻击力,有b[i]点血,英雄有A攻击力,B点血,每次battle后怪兽少A点血,英雄少a[i]点血,当血量少于等于0时死亡,所以看看英雄能不能打败所有怪兽。
题解:先看看英雄打败所有怪兽要少多少血-英雄最大血量,然后再和怪兽最大的攻击力比一下,就可以判断出结果。
#include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof a) #define ll long long int using namespace std; ll A,B,n; struct node{ ll hp,aa; }s[100100]; bool cmp(node a,node b) { return a.aa<b.aa; } int main() { int T; cin>>T; while(T--) { bool flag = true; ll ans = 0; ll maxx = 0; cin>>A>>B>>n; for(int i=1;i<=n;i++) { cin>>s[i].aa; maxx = max(maxx,s[i].aa); } for(int i=1;i<=n;i++) { int pp=0; cin>>s[i].hp; pp+=(s[i].hp/A); if(s[i].hp%A) pp++; ans+=(pp*s[i].aa); } //cout<<ans<<endl; if(B-ans>=0) { puts("YES"); } else if(B-ans+maxx>0) { puts("YES"); } else{ puts("NO"); } } }
C. Searching Local Minimum
二分交互题
#include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof a) #define ll long long int using namespace std; int main() { int n; cin>>n; int left=1,right=n; while(left<right) { int mid = (left+right)>>1; printf("? %d ",mid); fflush(stdout); int x; scanf("%d",&x); printf("? %d ",mid+1); fflush(stdout); int y; scanf("%d",&y); if(x>y) left=mid+1; else right=mid; } printf("! %d",left); fflush(stdout); return 0; }