Codeforces Round #700 (Div. 2)

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;
}
原文地址:https://www.cnblogs.com/lcsdsg/p/14388125.html