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

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

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 @   righting  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示