首页 > 其他分享 >UVA1500 Alice and Bob

UVA1500 Alice and Bob

时间:2024-04-24 13:11:25浏览次数:27  
标签:cnt int sum Alice UVA1500 merge ans Bob SG

Statement:

link

给 \(n\) 个数 \(a_1, a_2 ... ,a_n\)。先手 \(\rm Alice\) 和后手 \(\rm Bob\) 有两个操作。

  1. \(del(i)\) 令 \(a_i = a_i - 1\),必须满足 \(a_i > 0\)。

  2. \(merge(i, j)\),将 \(i, j\) 合并,必须满足 \(a_i, a_j > 0\)

若一个人不能进行操作,则判他输。若两人都足够聪明,问谁会获胜。

Solution:

首先分析没有 \(merge\) 操作的答案,令 \(sum = \sum_{i =1} ^ na_i\),显然 \(sum\) 为奇数,则先手胜,否则后手胜。

加入 \(merge\) 操作后,可以发现如果先手遇到的是 \(sum\) 为偶数的情况,可以使用 \(merge\) 来将偶数的情况扔给后手。所以我们其实可以转化为判定 \(sum + n - 1\) 的奇偶性。

但是这个时候可以发现有一个特殊的数字会影响答案。就是 \(1\)。

如果你对一个 \(1\) 进行 \(del\),相当于 \(merge\) 到了另一个 \(j\) 里,然后再进行 \(del\) 操作,这可以成为先手翻盘的关键。

于是我们发现有 \(1\) 的情况十分复杂,注意到这是一个公平组合游戏,于是我们就可以使用 \(\rm SG\) 函数来辅助解题。

观察到题目中 \(a\) 的值域和 \(n\) 都非常小,所以可以直接暴力的设 \(SG(cnt,s)\),其中 \(cnt\) 是 \(1\) 的个数, \(s\) 是当前局面的 $ sum + n - 1$。

于是可以直接分类讨论转移。细节见下面代码:

Code:

#include<bits/stdc++.h>
#define int long long 
using namespace std;

const int N = 50 + 10, M = 1e3 + 10;
int n, INF; 

int sg[N][M * N];

bool SG(int cnt, int sum){
//	cout << cnt << " " << sum << "\n";
	int& ans = sg[cnt][sum];
	if(ans != INF) return ans;
	if(!cnt) return (ans = (sum & 1));
	if(sum == 1) return (ans = SG(cnt + 1, 0));
	// 1. mer(1, 1) 2.mer(2, 1) 3. mer(2, 2) 4. del(1) 5. del(2)
	ans = 1;
	if(cnt >= 2) ans &= SG(cnt - 2, sum + 2 + (sum ? 1 : 0));
	if(sum && cnt) ans &= SG(cnt - 1, sum + 1);
//	if(sum >= 2) ans &= SG(cnt, sum - 1);
	if(cnt >= 1) ans &= SG(cnt - 1, sum);
	if(sum >= 1) ans &= SG(cnt, sum - 1);
	ans ^= 1;  return ans; 
}

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	int T; cin >> T; memset(sg, 0x3f, sizeof sg); INF = sg[0][0];
	for(int t = 1; t <= T; t++){
		cin >> n; int cnt = 0, sum = 0;
		for(int i = 1; i <= n; i++){
			int a; cin >> a;
			if(a == 1) cnt++;
			else sum += a + 1;
		}
		if(sum) sum--;
		cout << "Case #" << t << ": " << (SG(cnt, sum) ? "Alice" : "Bob") << "\n";
	}
	
	return 0;
} 

标签:cnt,int,sum,Alice,UVA1500,merge,ans,Bob,SG
From: https://www.cnblogs.com/little-corn/p/18155057

相关文章

  • TreeComboBox 【用户控件】
    效果如下纯粹用用户控件实现缺点:1、展开子项时候,文本框会初始化为第一项,不过在选择后就会设置成选中的选择的项。          2、只有在文本框可编辑状态下,才可以正常运行。          3、设置复杂,不太容易使用。   步骤1、设置Combobox。TreeComb......
  • 计算机软件弹出缺少ComboBox.ocx文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个ComboBox.ocx文件(挑选合适的版本文件)把它放入......
  • Avalonia下拉可搜索树(TreeComboBox)
    1.需求分析  树形下拉的功能是ComboBox和TreeView的功能结合起来,再结合数据模板来实现这一功能。2.代码实现 1.创建UserControl集成TreeView控件`publicclassTreeComboBox:TreeView{privatebool_isPushTextChangedEvent=true;privateButtonClearButton;pri......
  • WPF combobox selectionchanged and triggered the listbox scroll/locate to the sel
    //xaml<Windowx:Class="WpfApp48.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic......
  • WPF实现树形下拉列表框(TreeComboBox)
    前言树形下拉菜单是许多WPF应用程序中常见的用户界面元素,它能够以分层的方式展示数据,提供更好的用户体验。本文将深入探讨如何基于WPF创建一个可定制的树形下拉菜单控件,涵盖从原理到实际实现的关键步骤。一、需求分析    树形下拉菜单控件的核心是将ComboBox与TreeVi......
  • Wpf Combobox display multiple fields columns properties
    <ComboBoxGrid.Row="0"x:Name="cbx"VirtualizingPanel.VirtualizationMode="Recycling"HorizontalAlignment="Stretch"VerticalContentAlignment="Center"FontSize="30"Selec......
  • Wpf ComboBoxItem show multi fields
    <Windowx:Class="WpfApp28.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • lc2940 找到Alice和Bob可以相遇的建筑
    给出数组H[n]和多组询问Q[m],其中Q[i]={a[i],b[i]}表示查询最靠左的下标j,使得a[i]和b[i]都可以移到j处。从x处能移到y处的前提是x<y并且H[x]<H[y]。1<=n<=5e4;1<=H[i]<=1e9;1<=m<=5e4;0<=a[i],b[i]<=n-1相当于找最靠左的上限,可以用st表或线段树来维护区间最大值,然后二分找最左......
  • 中考英语首字母快速突破013-2021上海松江英语二模-Alice's Tiny Door: A Magical Jour
    PDF格式公众号回复关键字:ZKSZM013原文​Alicepickedagoldenkeyfromthetableandputitinallthelocksonthedoorsbutitdidn’topenanyofthem.Thenshediscoveredanotherdoor,averysmallone.Sheputthekeyinthelock.Itwasexactl......
  • 【WPF】-ComboBox控件详解
    ComboBox控件在很多方面都类似于ListBox控件,但占用的空间要少得多,因为项目列表在不需要时会隐藏起来。ComboBox控件在Windows中的很多地方都有使用,但为了确保每个人都知道它的外观和工作方式,我们将直接进入一个简单的示例:<Windowx:Class="WpfTutorialSamples.ComboBox_co......