洛谷 P1247 取火柴游戏
暴力
\((\)由于我这样的初中蒟蒻不\((bu)\)喜\((hui)\)欢\((xie)\)数学证明,所以题解中的证明全是其他大佬的题解已经多次证明过的,这里就不再啰嗦了。\()\)
------逗比与正经的分界线→_→------
思路:
就是先判断是否先手必胜,如果不是,就直接输出\(lose\),如果是的话,一根一根的取,就能得到正解啦!注释详见代码。
优化前的90分TlE代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define N 500001
using namespace std;
int n;
int a[N];
int read()
{
int ans=0;
char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
while(ch>='0'&&ch<='9')
{
ans=(ans<<1)+(ans<<3)+ch-'0';
ch=getchar();
}
return ans;
}
bool pd()
{
int ans=0;
for(int i=1;i<=n;++i)
ans^=a[i];
return ans;
}
bool in()
{
n=read();
int ans=0;
for(int i=1;i<=n;++i)
a[i]=read();
return pd();
}
void out(int aaa,int bbb)
{
printf("%d %d\n",aaa,bbb);
for(int i=1;i<=n;++i)
printf("%d ",a[i]);
}
void work()
{
for(int i=1;i<=n;++i)
{
for(int j=1;j<=a[i];++j)
{
a[i]-=j;
if(!pd())
{
out(j,i);
return;
}
a[i]+=j;
}
}
}
int main()
{
if(!in())
{
printf("lose\n");
return 0;
}
work();
return 0;
}
优化后的100分AC代码:其实就是减少了点常数
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define N 500001
using namespace std;
int n;
int a[N];
int read()//读入。
{
int ans=0;
char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
while(ch>='0'&&ch<='9')
{
ans=(ans<<1)+(ans<<3)+ch-'0';
ch=getchar();
}
return ans;
}
int xorexptx(int x)//xor except x :求a数组内除第x个之外的异或值。
{
int ans=0;
for(int i=1;i<=n;++i)
if(i!=x)
ans^=a[i];
return ans;
}
void out(int aaa,int bbb)//输出,不多解释。
{
printf("%d %d\n",aaa,bbb);
for(int i=1;i<=n;++i)
printf("%d ",a[i]);
}
void work()
{
for(int i=1;i<=n;++i)
{
int num=xorexptx(i);//一个小小的优化:把其他n-1个数异或起来,就不用再多算了。
for(int j=1;j<=a[i];++j)
{
a[i]-=j;
if(!(num^a[i]))//异或上该数,然后再看能不能先手必败(此时计算机是先手)。
{
out(j,i);//如果能,就输出。
return;//返回,结束程序。
}
a[i]+=j;
}
}
}
int main()
{
n=read();
int ans=0;
for(int i=1;i<=n;++i)
a[i]=read(),ans^=a[i];
if(!ans)//如果他们的异或和=0,那么先手必败,证明略。
{
printf("lose\n");
return 0;
}
work();//否则先手必胜。
return 0;
}
萌新第一次写题解,还望各位大佬多多支持。【Bye】
洛谷 P1247 取火柴游戏的更多相关文章
- 洛谷P1247取火柴游戏
题目:https://www.luogu.org/problemnew/show/P1247 可以知道必败局面为n[1]^n[2]^...^n[k]=x=0: 而若x不等于0,则一定可以取一次使其变为 ...
- 洛谷P1247 取火柴游戏
经典NIM游戏. 取XOR和即可. 注意输出方案时,找到大于异或和sum的,变为a[i] ^ sum即可. #include <cstdio> ; int a[N]; int main() ...
- 洛谷P1288 取数游戏II(博弈)
洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...
- 【洛谷】P1247取火柴游戏
题目链接:https://www.luogu.org/problemnew/show/P1247 题意:nim取石子的题意,多了一个判断先手赢的话,输出先手第一把怎么拿,以及拿完之后每堆还剩多少. 题 ...
- P1247 取火柴游戏
题目描述 输入k及k个整数n1,n2,-,nk,表示有k堆火柴棒,第i堆火柴棒的根数为ni:接着便是你和计算机取火柴棒的对弈游戏.取的规则如下:每次可以从一堆中取走若干根火柴,也可以一堆全部取走,但不 ...
- 洛谷——P1123 取数游戏
P1123 取数游戏 题目描述 一个N×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻8个格子中的一个即认为这两个数字相邻),求取 ...
- 洛谷——P2252 取石子游戏
P2252 取石子游戏 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- 【洛谷】P1247 取火柴游戏(Nim)
题目 传送门:QWQ 分析 蒟蒻根本不会博弈论..... 只知道异或和判断Nim游戏.. 不是很懂输出的选择,所以发一篇博客以待复习 代码 #include <bits/stdc++.h> ...
- 洛谷P1288 取数游戏II[博弈论]
题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...
随机推荐
- IDEA call Hierarchy 双击跳转源码后绿色选中背景不消失问题
1.版本,2019.2.2. 2.这个问题貌似是个bug,就是选中变色后会一直在,目前没有找到对应方法或者配置,如果你找到了,欢迎在评论中分享一下. 3.我这里只能先简单粗暴处理下,通过设置选中时不设 ...
- python pandas模块简单使用(读取excel为例)
第一步:模块安装 pip install pandas 第二步:使用(单个工作表为例) 说明:如果有多个工作表,那么只要指定sheetname=索引,(第一个工作表为0,第二个工作表为1,以此类推) ...
- Linux命令:netstat命令
netstat功能:显示网络连接情况 netstat功能选项 -t:tcp协议的连接 -u:udp协议的链接 -l:监听状态的连接 -a:所有状态的连接 -p:连接相关的进程 -n:数字格式显示 -r ...
- what is 'linesize alignment' meaning?
链接: https://stackoverflow.com/questions/35678041/what-is-linesize-alignment-meaning
- MyBatis6——一级缓存、二级缓存、逆向工程
查询缓存 一级缓存:同一个sqlSession对象 MyBatis默认开启一级缓存,如果用同样的sqlSession对象查询相同的数据,则会在第一次查询时向数据库发送SQL语句,并将查询的结果放入到S ...
- Java 对不同类型的数据文件的读写操作整合器[JSON,XML,CSV]-[经过设计模式改造](2020年寒假小目标03)
日期:2020.01.16 博客期:125 星期四 我想说想要构造这样一个通用文件读写器确实不容易,嗯~以后会添加更多的文件类型,先来熟悉一下文件内容样式: <?xml version=&quo ...
- RabbitMQ通过http API获取队列消息数量等信息
参考 RabbitMQ提供了HTTP API手册,发现其中有获取队列情况的API.(本地的API手册地址为:http://localhost:15672/api) 所有API调用都需要做权限验证,需在 ...
- CF 1278C Berry Jam 题解
Forewords 说实话我是被图吸引进来的23333,图画的真的挺好看. 题意 你从一个梯子下到地下室,梯子左右两边各有 \(n\) 瓶果酱排成一排,果酱口味为草莓味或蓝莓味,你每次只能吃你左边或右 ...
- 2020.2.19 restful的学习
restful Api 设计要素 3-8 如何设计Restful Api 资源路径(url),HTTP动词,过滤信息(做分页),状态码,错误处理,返回结果 3-9 初始化运行参数 3-10 ...
- python之闭包,装饰器
目录 函数对象 :相当于变量名 函数对象的作用: 1. 可以引用 2. 可以作为函数的返回值 3. 可以作为容器的元素 4. 可以作为函数的参数 闭包 定义: 如果在一个函数的内部定义了另一个函数,外 ...