首页 > 其他分享 >题解:Tokitsukaze, CSL and Stone Game

题解:Tokitsukaze, CSL and Stone Game

时间:2024-10-25 19:42:59浏览次数:5  
标签:CSL 相等 return puts 两堆 题解 Tokitsukaze Game cslnb

Problem Link

Tokitsukaze, CSL and Stone Game

题外话

对于某些人说降绿甚至降黄,本人是很不同意的,毕竟多一道水蓝有什么不好

题意

翻译得很简洁,不再赘述。

Solution

不难发现有以下几种情况:

  • 只有两堆不等的,肯定选少的那堆,因为这样不易使得两堆相等。

  • 若两堆相等,一定破坏相等的情况,否则取完后就输了,若之后还有两堆相等的,还是输。

  • 就一堆,先后手分别取。

  • 若剩下的堆形成首项为 \(0\) 的公差为 \(1\) 的等差公式,那么操作者输,因为不论怎么操作一定会使得操作完后有两堆相等的。

  • 有三堆,那么先手必输,原因由上述。

其余就是暴力实现了,看码力,详见代码。

Code

// written by Naught
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define Maxn 100005
#define fo(i, l, r) for (int i = l; i <= r; ++i)
#define getchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[1<<21], *p1 = buf, *p2 = buf;
inline int read(int x=0, bool f=0, char c=getchar()) {for(;!isdigit(c);c=getchar()) f^=!(c^45);for(;isdigit(c);c=getchar()) x=(x<<1)+(x<<3)+(c^48);return f?-x:x;}

int n, a[Maxn], sum, m;

int main()
{
    n = read();
    fo(i, 1, n) a[i] = read(), sum += a[i];
    sort(a + 1, a + n + 1);
    fo(i, 1, n) if(a[i] == a[i + 1]) ++m;
    if(m >= 2) return puts("cslnb"), 0;
    if(m == 1) fo(i, 1, n) if( (a[i] == a[i + 1] && a[i - 1] + 1 == a[i] && i != 1) || (a[i] == a[i + 1] && a[i] == 0) ) return puts("cslnb"), 0;
    m = 0;
    fo(i, 1, n) m += i;
    m -= n;
    if(sum - m == 0) return puts("cslnb"), 0;
    if(((sum - m) & 1) == 0) return puts("cslnb"), 0;
    else return puts("sjfnb"), 0;
    return 0;
}

标签:CSL,相等,return,puts,两堆,题解,Tokitsukaze,Game,cslnb
From: https://www.cnblogs.com/naughty-naught/p/18503180

相关文章

  • ZZJC新生训练赛第九场题解
    A题思路重点在于题目操作蕴含的奇偶数关系,一个偶数可以和一个奇数一起删除,两个奇数可以一起删除。代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn;cin>>n;vector<int>ar(......
  • 蓝桥首场算法团队战2024.10.24 题解(1~5)
    蓝桥首场算法团队战2024.10.24题解1:不同角度【算法赛】题意:给定自然数S,需要找出一个自然数T。使得数字T>数字S并且S和T转化为字符串后,满足S的字典序>T的字典序。T一定存在,找出符合条件且字典序最小的T。输入:第一行一个整数t,表示t组测试用例。\((......
  • AT_abc195_e 题解
    思路这道题需要倒序计算。定义$dp_{i,j}=f$表示第$i$轮结束后余数为$j$,$f=1$时,Takahashi必胜,否则Aoki必胜。动态转移方程式令:$x=dp_{i,(j\times10+a_i)\bmod7}$$y=dp_{i,j\times10\bmod7}$$dp_{i-1,j}=\begin{cases}x\\operatorname{or}\y&b_i=T\x\......
  • 乒乓球题解()
    30pts考场上看到这个题时,第一反应就是全部展开man慢算诶,刚好有30分部分分可以\(O(n)\)维护那么使用\(tot\)来记录遍历到哪一位了,当\(tot\)遍历到结尾时直接让他归0即可点击查看代码#include<bits/stdc++.h>usingnamespacestd;intn,len,tot,a,b,A,B;chart[10010......
  • ♿交换序列题解♿
    以下将状态\(K\),\(E\),\(Y\)用数字0,1,2表示。考虑\(dp\)我们设\(dp[a][b][c][d]\)表示\(K\)用了\(a\)次,\(E\)用了\(b\)次,\(Y\)用了\(c\)次,总共交换了\(d\)次,前缀和$sum[i][j]$表示到第\(j\)位有几个字母\(i\)记录一个\(loc[i][j]\)表示第\(j\)个字......
  • 序列题解
    哈哈哈我也有个唐氏做法也是考虑一个朴素dp,设\(dp_{i}\)表示以\(i\)结尾的字串最长是多少,则容易想到若\(a_{i-1}\)和\(a_i\)是等比数列的一部分就一定能从\(dp_{i-1}\)转移到\(dp_i\),证明最后讲那么如何判断\(a_{i-1}\)和\(a_i\)是否为等比数列的一部分呢?首先......
  • 最长的Y题解
    考虑将Y单独拎出来,用数组存储他的下标,那么将第\(x\)个Y转移至第\(y\)个Y就需要\(a[x]-b[y]-1\)次操作。发现一个问题:第一次从左移动至\(y\)需要减1,第二次从左移动需要减2……如图:这似乎是一个很麻烦的问题,我们的某知名\(lyh\)教授是通过指针(应该是吧)解决的。......
  • 家谱树题解
    (ACM比赛时忘了拓扑怎么写时代尻古)假设有一个DAG图,那么如何写出它的拓扑排序呢?这里说一种比较常用的方法:1.从DAG图中选择一个没有前驱(即入度为0)的顶点并输出。2.从图中删除该顶点和所有以它为起点的有向边。3.重复1和2直到当前的DAG图为空或当前图中不存在无前驱的......
  • SSL证书常见问题解答
    在当今的数字时代,确保网站和数据的安全性变得尤为重要。SSL(SecureSocketsLayer)证书作为保障网站安全的关键组件,广泛应用于各种在线服务中。然而,在SSL证书的申请、安装和使用过程中,用户常常会遇到各种问题。本文旨在提供一个全面的指南,帮助用户理解并解决SSL证书的常见问题。......
  • 题解:CF722D Generating Sets
    涉及知识点:set。解题思路每次让列表中最大的元素缩小两倍,保证答案最优。如果当前的元素缩小成$0$就直接跳出循环,输出这个序列。由于序列需要支持插入、删除以及找最大值,所以这个序列可以用set来维护。代码#include<bits/stdc++.h>#defineintlonglong#definell......