首页 > 其他分享 >AT_arc105_d

AT_arc105_d

时间:2024-01-12 21:38:20浏览次数:25  
标签:背包 硬币 int arc105 先手 异或 盘子

分析

注意到本题在放完盘子之后就是一个简单的 Nim 问题,所以考虑每个背包会放到哪个盘子。由于放完盘后谁执先手与 \(n\) 的奇偶性有关,于是分类讨论。

如果 \(n\) 是奇数,放完后后手先取硬币,他肯定会尽量让异或和不为 \(0\)(Nim 的玩法),那么他有一个必胜策略:不管先手取哪个背包,他先取走剩余的背包里硬币最多的,然后放到先手放的盘子里,接下来每次取剩余的背包里硬币最多的,这样初始时先手放的背包必定至少比其它的盘子在二进制下多出一位(因为每次都有进位),所以异或和一定不是 \(0\)。综上,\(n\) 为奇数是后手必胜。

如果 \(n\) 是偶数,放完后先手先取硬币,那么后手肯定会尽量让异或和为 \(0\),一种可行的策略是,先手干什么他就干什么,先手找了一个 \(a_i\) 个硬币的背包,他也找一个,先手把硬币放到了有 \(b_i\) 个的盘子里,后手也放到有 \(b_i\) 个的盘子里(\(b_i\) 可以为 \(0\))。当然,这是建立在每个 \(a_i\) 都出现偶数次的情况,此时后手必胜。反之,如果存在 \(a_i\) 出现奇数次,那么先手就可以把那个出现奇数次的 \(a_i\) 放到当时 \(b_i\) 最大的盘子里,然后就会出现上一段提到的情况,这个盘子必定比其它盘子多出至少一位,则异或和必定不是 \(0\),故先手必胜。

AC Code

#include <bits/stdc++.h>
using namespace std;
#define int long long
map<int,int> mp;
int a[100010];
void solve()
{
	mp.clear();
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		mp[a[i]]++;
	}
	if(n%2)
	{
		cout<<"Second"<<endl;
		return;
	}
	for(int i=1;i<=n;i++)
	{
		if(mp[a[i]]%2)
		{
			cout<<"First"<<endl;
			return;
		}
	}
	cout<<"Second"<<endl; 
}
signed main()
{
	int t;
	cin>>t;
	while(t--)
	solve();
	return 0;
} 

标签:背包,硬币,int,arc105,先手,异或,盘子
From: https://www.cnblogs.com/Crazyouth/p/17961621

相关文章

  • ARC105E Keep Graph Disconnected 题解
    ARC105E正向考虑是很难的,从结果入手,发现最后一定是分别包含\(1\),\(n\)的两个完全图。考虑表示出这两个人一共加了多少边:\(\frac{n(n-1)}{2}-m-x(n-x)\),\(x\)表示点\(1\)所在集合的大小。由于是判断先手还是后手必胜,所以只需看结果对\(2\)的余数,于是对\(n\)的奇偶进行......
  • [ARC105E] Keep Graph Disconnected
    NOIP模拟赛原题,赛时还是没切。正解奇偶性。考虑最终不能走的时候是什么情况,当且仅当图中只剩下两个联通块了。设其中一个联通块的点数为\(k\),那么另一个的点数为\(n-k\)。所以两人一共的操作次数为\(sum=\frac{n\times(n-1)}{2}-m-k\times(n-k)\)。显然如果\(sum......
  • [ARC105E] Keep Graph Disconnected
    题目链接好题。如果\(1\)和\(n\)一直联通,开始即结束。如果\(n\mod4=1\),那么\(\frac12x(x+1)+\frac12(n-x)(n-x+1)\)为偶数。如果\(n\mod4=3\),那么\(\frac12x(x+1)+\frac12(n-x)(n-x+1)\)为奇数。这两种情况最后连的边的数量奇偶固定,结合\(m\)的大小可以算出......
  • [ARC105E] Keep Graph Disconnected 题解
    题意给定一张由\(N\)个点和\(M\)条边组成的简单无向图\(G\),定义一个无向图是好的当且仅当这张图满足以下条件:\(1\)号节点和\(N\)号节点不联通图中不存在重边和自环现有两人轮流采取操作,每轮操作如下:选择两个点\(u,v\),将边\((u,v)\)加入图\(G\)中当一方无......
  • [ARC105C] Camels and Bridge 题解
    题意给定\(N\)个重物,其中第\(i\)个重物的重量为\(w_i\)。现在要将其排成一排,可以任意指定相邻两个重物的距离。同时给定\(M\)个限制,其中第\(i\)个限制为\((l_i,v_i)\),表示要求不存在长度为\(l_i\)的线段,使得其包括的重物重量之和大于\(v_i\)。最小化重物间的最大......
  • [ARC105D] Let's Play Nim 题解
    题意给定\(N\)个背包,其中第\(i\)个背包中有\(a_i\)个石子。同时还有\(N\)个盘子,初始时盘子中没有石子。两人轮流执行下列操作:若存在背包中还有石子,选择一个非空背包和盘子,将背包中的石子放入盘子中,注意这里对盘子没有要求;若不存在背包中还有石子,选择一个非空盘子,将盘......
  • 【杂题乱写】ARC105
    AtCoderRegularContest105AFourtuneCookies按题意模拟。BMAX-=min题目中提到过程一定会停止,考虑\(n=2\)时就是更相减损至相等,即求\(\gcd\),扩展到\(n\)更大......
  • 【ARC105C】Camels and Bridge 题解
    题意给定\(n\)只骆驼和每条骆驼的重量\(a_i\)。这些骆驼要通过一条路,这条路被分为\(m\)个部分,每个部分的长度为\(l_i\),限重为\(v_i\)。同时经过这部分的骆驼的重......