首页 > 其他分享 >AtCoder Regular Contest 131(A,B,C)

AtCoder Regular Contest 131(A,B,C)

时间:2023-03-05 12:45:28浏览次数:52  
标签:AtCoder 那么 int 异或 long 131 Regular maxn include

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;
}

标签:AtCoder,那么,int,异或,long,131,Regular,maxn,include
From: https://www.cnblogs.com/righting/p/17180221.html

相关文章

  • 题解:【ABC292F】 Regular Triangle Inside a Rectangle
    题目链接不妨设\(a\leb\)。显然当三角形三个点都在矩形边上的时候可以得到答案。通过手玩我们可以发现,当正方形推广到矩形的过程中,我们将一边拉长,三角形就可以不断往......
  • AtCoder Beginner Contest 292
    A-CAPSLOCK(abc292a)题目大意给定一个小写字母串,将其转换成大写字母。解题思路调库,或者按照ascii码转换即可。神奇的代码#include<bits/stdc++.h>usingname......
  • AtCoder Beginner Contest 252
    AtCoderBeginnerContest252D题意在数组中形如\(1\leqi<j<k\leqn\)使得\(a_i,a_j,a_k\)互不相同,求共有多少组满足条件思路它的数据范围\(1\leqa_i\leq2*10^5\)......
  • AtCoder Beginner Contest 251
    AtCoderBeginnerContest251D给定一个1e6范围内的数n,要你构造出一个数组,对于1~n中的任何一个数都能用数组中最多三个数的和加起来。这题真的是很好的一道思维题,想了我......
  • 【DFS】LeetCode 131. 分割回文串
    题目链接131.分割回文串思路使用DFS,同时依次检查分割的字符串是否是回文串。注意:需要频繁添加删除末尾元素时,可以使用Deque代码classSolution{privateLis......
  • AtCoder Regular Contest 155
    期末考完复健,补一下一个月前打的ARC当时赛后9秒过D,太痛了,第一次体验这种只能说,幸好当时要打的时候感觉状态不行,就unrated了比赛的状况是:A不知道哪错了;C不会;D博弈DP原......
  • AtCoder Beginner Contest 291(Sponsored by TOYOTA SYSTEMS)(D,E,F)
    AtCoderBeginnerContest291(SponsoredbyTOYOTASYSTEMS)(D,E,F)DD又一次误解题意这个题的要求是相邻的两个数不同,而我的翻译上是整个数列的数都是不同的(ಥ﹏ಥ)大意是......
  • AtCoder Beginner Contest 275 A-F 题解
    比赛链接砳赫賏,看懂扣1(A-FindTakahashi模拟。#include<cstdio>#include<algorithm>usingnamespacestd;intn,mx,id=1;intmain(){ intx; scanf("%d......
  • Atcoder ARC084D Small Multiple
    \(O(k)/O(k)\)解法标签:建图最短路考虑对于一个数\(x\),考虑由它在末尾改变能产生哪些状态:\(x+1\),此时对应的数位和\(+1\)\(x\times10\),对应数位和不变那直接把......
  • [AtCoder Grand Contest 060][C. Large Heap]
    看了几篇题解都是从下往上(子树大小从小到大)推的,来整一个从上往下的。题目链接:C-LargeHeap题目大意:称一个大小为\(2^N-1\)的排列是好排列当且仅当其满足对任意\(1\l......