首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
BZOJ 1299: [LLH邀请赛]巧克力棒 【SG函数/博弈分析/高斯消元】
】的更多相关文章
BZOJ 1299: [LLH邀请赛]巧克力棒 【SG函数/博弈分析/高斯消元】
因为太懒,放个博客 我只写了O(2n)O(2^n)O(2n)的 CODE #include <cstdio> int n, x[15]; int main () { for(int T = 1; T <= 10; ++T) { scanf("%d", &n); for(int i = 0; i < n; ++i) scanf("%d", &x[i]); bool flg = 0; for(int s = (1<<n…
bzoj:1299: [LLH邀请赛]巧克力棒
原题:http://www.lydsy.com/JudgeOnline/problem.php?id=1299 众多dalao的题解已经很详细了:http://blog.csdn.net/wzq_qwq/article/details/47258871 这里我只补充一下用高斯消元的方法优化到14*14*30的时间复杂度,而不是2^14 目标是求出是否有一种取数方案使异或和为0 那么按位拆分一下,得到30个方程,但是只有14个变量.解是肯定存在的(全部不取),但是我们希望解的数量大于一.由于解的数…
BZOJ 1299: [LLH邀请赛]巧克力棒 [组合游戏]
每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度. Nim游戏多了一个决策:拿出一些石堆 显然只要给对方构造异或和为0的子集就行了 暴枚子集... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef long long ll…
BZOJ.1299.[LLH邀请赛]巧克力棒(博弈论 Nim)
题目链接 \(Description\) 两人轮流走,每次可以从盒子(容量给定)中取出任意堆石子加入Nim游戏,或是拿走任意一堆中正整数个石子.无法操作的人输.10组数据. \(Solution\) 考虑简化当前局面 1.若先手从盒子中拿出异或和为0的几堆石子,即建立了一个先手必败(第一步由后手来走)的Nim游戏,先手一定可以最后把这些石子取完: 但是先手不会给后手机会添加异或和为0的石子 或是 最后新建一个异或和为0的Nim,会取尽量多的异或和为0的石子堆. 所以后手只能添加异或和不为0的石子…
ACM学习历程—HDU 3915 Game(Nim博弈 && xor高斯消元)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3915 题目大意是给了n个堆,然后去掉一些堆,使得先手变成必败局势. 首先这是个Nim博弈,必败局势是所有xor和为0. 那么自然变成了n个数里面取出一些数,使得xor和为0,求取法数. 首先由xor高斯消元得到一组向量基,但是这些向量基是无法表示0的. 所以要表示0,必须有若干0来表示,所以n-row就是消元结束后0的个数,那么2^(n-row)就是能组成0的种数. 对n==row特判一下. 代码:…
【BZOJ】1299: [LLH邀请赛]巧克力棒
[算法]博弈论 [题解]这道题不是典型的SG函数题了. 不把它当成游戏看待,那么这道题是在说n个石子堆,每次可以加入若干个或进行Nim游戏. 我们当前先手,则考虑构造必败态来获胜. 当前已加入的NIm游戏SG=0,则必须考虑加入石子堆,若加入m堆构造出SG=0,对方有两种选择: 加入新的石子堆,则必须是SG=0. 进行Nim游戏,但是目前SG=0,先手必败. 所以只要把n堆中异或和=0的最长子序列在第一次操作时移入即可先手必胜. #include<cstdio> #include<alg…
BZOJ 3143 Luogu P3232 [HNOI2013]游走 (DP、高斯消元)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3143 (luogu) https://www.luogu.org/problemnew/show/P3232 题解: 水题.考虑如何求每个点的期望经过次数: 要求\(1\)号点开始\(n\)号点结束,那么\(1\)号点一定一上来就会经过一次,\(n\)号点一共只会经过\(1\)次.因此对于\(1\)到\(n-1\)的每一个点可以列出一个方程,其中\(1\)号点的方程是\…
【BZOJ 3143】【Hnoi2013】游走 期望+高斯消元
如果纯模拟,就会死循环,而随着循环每个点的期望会逼近一个值,高斯消元就通过列方正组求出这个值. #include<cstdio> #include<cctype> #include<cstring> #include<algorithm> using namespace std; const double eps=1e-9; bool vis[503]; double f[503],a[503][503],ans[500*500]; int N,M,cnt=…
BZOJ 2844 albus就是要第一个出场(高斯消元)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2844 题意: 给出一个长度为n的正整数数列A.每次选出A的一个子集进行抑或(空集抑或值为0),这样就得到一个长度为2^n的数列B.将B中元素升序排序.给出一个数字m,求m的B中出现的最小位置. 思路:首先将数字看做是二进制进行高斯消元,最后得到k个线性无关的数字,那么B中所有数字均可由这k个线性无关的数字得到,可以得到2^k个不同数字,每个数字在B中出现2^(n-k)次.因此,对于m,…
【BZOJ】1013 [JSOI2008]球形空间产生器sphere(高斯消元)
题目 传送门:QWQ 分析 高斯消元就是个大暴力.... 代码 #include <bits/stdc++.h> using namespace std; ; ; int n; double a[maxn][maxn], b[maxn][maxn] ,c[maxn]; double sqr(double a) {return a*a;} void Gauss() { int n; scanf("%d",&n); ;i<=n+;i++) ;j<=n;j++…