CF 173#DIV2

A. Bit++

没见过这么水的了,只需要注意开数组不能为a[3],a[n],n>3
代码:
#include<iostream>//CF A题
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<map>
using namespace std;
char a[4];
int main()
{
    int n;
    cin>>n;
    int s=0;
    while(n--)
    {
        cin>>a;
        if(a[0]=='+' || a[1]=='+')
        s++;
        if(a[0]=='-' || a[1]=='-')
        s--;
    }
    cout<<s<<endl;
    return 0;
}

B. Painting Eggs

读懂题目就很水,J要买画的鸡蛋,每次都倾向与买A的,但是买A的钱和买G的钱相差大于500时就不能买A的,只能买G的
代码:
#include<iostream>//CF B题
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<map>
using namespace std;
int main()
{
    int n,i,a,b;
    cin>>n;
    int s1=0,s2=0;
    for(i=1; i<=n; i++)
    {
        cin>>a>>b;
        s1+=a;
        if(s1-s2>500 || s2-s1 >500)
        {
            cout<<"G";
            s2+=b;
            s1-=a;
        }
        else
        {
            cout<<"A";
        }
    }
    return 0;
}

C. XOR and OR

题意:给出两个只有0和1组成的字符串,问是否能在第一串中任取两个相邻的两个数x,y,通过p=x xor y,q=x^y得到第二字符串。。。
唉~想歪了,以为异或出来就放到第二字符串,原字符串不变,这是错的,操作后原数就变了。。。
思路:1和任何数进行操作可以变成1或者0,所以只需要考虑1就行了,两字符串都有1肯定能行。。
代码:
#include<iostream>//CF C题
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
using namespace std;
const int M=1000001;
char a[M],b[M];
int main()
{
    cin>>a;
    cin>>b;
    int la=strlen(a);
    int lb=strlen(b);
    if(la!=lb)
    {
        cout<<"NO"<<endl;
    }
    else if(strcmp(a,b)==0)
        cout<<"YES"<<endl;
    else
    {
        int s1=0,s2=0;
        for(int i=0; i<la; i++)
        {
            if(a[i]=='1')s1++;
            if(b[i]=='1')s2++;
        }
        if(s1&&s2)
        cout<<"YES"<<endl;
        else
        cout<<"NO"<<endl;

    }
    return 0;
}

D. Yet Another Number Game

需要特判。。
一堆情况,直接判断,二堆情况,对0 0 和相同情况 特殊处理,其他用威佐夫博奕,三堆情况,用尼姆博弈
代码:
#include<iostream>//CF D题
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
using namespace std;
int a[5];
int main()
{
    int n;
    cin>>n;
    for(int i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }
    if(n==1)
    {
        if(a[0]!=0)
        cout<<"BitLGM"<<endl;
        else
         cout<<"BitAryo"<<endl;
    }
    if(n==2)
    {
        if(a[0]==a[1]&&a[0]!=0)
        {
            cout<<"BitLGM"<<endl;
        }
        else
        {
            int k=abs(a[0]-a[1]);
            int m=min(a[0],a[1]);
            int g=k*(sqrt(5.0)+1)/2;//直接放里面判断答案是错的,存在精度问题
            //g*=k;
           // g/=2;
            if(g==m)
                cout<<"BitAryo"<<endl;
            else
                cout<<"BitLGM"<<endl;
        }

    }
    if(n==3)
    {
        if((a[0]^a[1]^a[2])==0)
            cout<<"BitAryo"<<endl;
        else
            cout<<"BitLGM"<<endl;
    }
    return 0;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值