每一年都奔走在自己热爱里

没有人是一座孤岛,总有谁爱着你

AtCoder Regular Contest 131(A,B,C)

AtCoder Regular Contest 131(A,B,C)

A

A

这个大意就是很容易做出来,只是有一点要注意,对于第二个字符串,如果小于\(2\),那么比如\(1\),,这些可能是进位形成的,所以我们需要补一个\(0\),进位之后就是\(1\)

#include <iostream>
#include <string>
using namespace std;
#define int long long 
int x,y;
signed main ()
{
    cin>>x>>y;
    cout<<x;
    if (y/2<1)
    {
        cout<<0;
    }
    if (y&1)
    {
        y=y*10ll+2;
    }
    cout<<y/2ll<<'\n';
    system ("pause");
    return 0;
}

B

B

就是有一个网格,每一个网格有\(5\)种选择,我们要保证格子和它相邻的格子的数字不一样,那么我们可以知道每一个格子都一定有一种是满足条件的

所以我们可以一个一个的找(不要递归,我错了,可能是我的方式不对)

正确代码

#include <iostream>
#include <string>
#include <map>
using namespace std;
#define int long long 
const int maxn=700+10;
int x,y;
int h,w;
string s[maxn];
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
char check(int x,int y)
{
    if (s[x][y]>='1'&&s[x][y]<='5') return s[x][y];
    bool vis[6];
    for (int i=1;i<=5;i++)
    {
        vis[i]=true;
    }
    for (int d=0;d<4;d++)
    {
        int tx=x+dx[d];
        int ty=y+dy[d];
        if (tx>h||tx<1||ty>w||ty<1) continue;
       /* int now=check(tx,ty)-'0';*///错误的
        int now;
        if (s[tx][ty]=='.') now=0;
        else now=s[tx][ty]-'0';
        vis[now]=false;
    }
    for (int i=1;i<=5;i++)
    {
        if (vis[i])
        {
            s[x][y]=i+'0';
            return s[x][y];
        }
    }
}
signed main ()
{
    cin>>h>>w;
    for (int i=1;i<=h;i++)
    {
        cin>>s[i];
        s[i]=" "+s[i];
    }
    for (int i=1;i<=h;i++)
    {
        for (int j=1;j<=w;j++)
        {
           cout<<check(i,j);
        }
        cout<<'\n';
    }
    system ("pause");
    return 0;
}

C

C

这个是给你\(n\)个数,两个人每次拿出一个数,如果某一个人拿出了一个数之后,剩下的数异或值为\(0\),那么这个人就赢了

对于这个比赛,在什么时候赢呢

如果一个数是\(x\),此时的所有数异或值也是\(x\),那么拿走这个\(x\)后面的异或值是\(0\),这个人赢了

如果存在不可以一步到位的话

那么我们可以用二进制的每一位的\(1\)的数量来看

那么我们可以知道此时一定会存在一些位置上的\(1\)的数量为奇数,要想赢,只有把每一位的\(1\)都变成偶数个,那么先手需要把删除一个,变成偶数个\(1\)了,但是我们一步并不能赢,还有其他的奇数个\(1\),那么后手为了不让先手赢,他会把先手那个位置减少为偶数个的\(1\)变成奇数个(又删除一个),然后这样不管谁删除,后面的也跟着来,那么输赢就只能看谁可以删除最后一个,没有数,异或也是\(0\),那么我们可以用奇偶性来判断

#include <iostream>
using namespace std;
#define int long long 
const int maxn=400000+10;
int a[maxn];
signed  main ()
{
    int n;
    cin>>n;
    int x=0;
    for (int i=1;i<=n;i++)
    {
        cin>>a[i];
        x=x^a[i];
    }
    if (n&1)
    {
        cout<<"Win\n";
    }
    else 
    {
        bool win=false;
        for (int i=1;i<=n;i++)
        {
            if (a[i]==x)
            {
                win=true;
                break;
            }
        }
        if (win)
        {
            cout<<"Win\n";
        }
        else 
        {
            cout<<"Lose\n";
        }
    }
    system ("pause");
    return 0;
}
posted @ 2023-03-05 12:37  righting  阅读(16)  评论(0)    收藏  举报