洛谷2148(SDOI2009) E&D
题目:https://www.luogu.org/problemnew/show/P2148
SG函数+找规律。
普通地用SG函数做。
每两堆是一个独立问题。因为虽然有可能一个人在同一组里连续操作2次,但操作一次一定会把一个必败状态改为必胜状态,不会需要连续操作两次。
关键是怎么快速求SG函数。
打表找规律:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int sg[][];
void dfs(int x,int y)
{
if(sg[x][y]!=-)return;
int sum=;
for(int i=;i<x;i++)
{
dfs(i,x-i);
sum|=(<<sg[i][x-i]);
}
for(int i=;i<y;i++)
{
dfs(i,y-i);
sum|=(<<sg[i][y-i]);
}
for(int i=;i<=;i++)
if((sum&(<<i))==)
{
sg[x][y]=i;sg[y][x]=i;
return;
}
}
int main()
{
memset(sg,-,sizeof sg);
sg[][]=;
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
dfs(i,j);
printf("%3d",sg[i][j]);
}
printf("\n");
}
return ;
}
然后发现 i 和 j 的规律:
SG=1:i % 2 ==1 && j % 2 ==1;
SG=2:i % 4 == 1,2 && j % 4 == 1,2;
SG=3:i % 8 == 1,2,3,4 && j % 8 == 1,2,3,4;
……
所以有了那个log的算法。
仔细一看,那个就是求 i 和 j 的第一个公共0在第几位,所以又有了O(1)的式子。
但是那个O(1)的式子有一个点过不去,是把NO输出成YES,不知何故。
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const ll N=2e4+;
ll T,n,a[],sum;
ll sg(ll a,ll b)
{
for(ll i=,tmp=;;i++,tmp<<=)
if((a-)%tmp<(tmp>>)&&(b-)%tmp<(tmp>>))
return i;
// ll k=((a-1)|(b-1));
// k=((k+1)&(-k-1));
// return k-1;
}
int main()
{
scanf("%lld",&T);
while(T--)
{
scanf("%lld",&n);sum=;
for(ll i=;i<=n;i++)
{
scanf("%lld",&a[i&]);
if(!(i&))sum^=sg(a[],a[]);
}
if(sum)printf("YES\n");
else printf("NO\n");
}
return ;
}
洛谷2148(SDOI2009) E&D的更多相关文章
- BZOJ1228或洛谷2148 [SDOI2009]E&D
BZOJ原题链接 洛谷原题链接 完全不会呀.. 写了这题才知道\(SG\)函数原来也能打表找规律... 题解请看大佬的博客 #include<cstdio> using namespace ...
- 洛谷P1972 [SDOI2009]HH的项链 题解
[SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...
- BZOJ1880或洛谷2149 [SDOI2009]Elaxia的路线
BZOJ原题链接 洛谷原题链接 显然最长公共路径是最短路上的一条链. 我们可以把最短路经过的边看成有向边,那么组成的图就是一张\(DAG\),这样题目要求的即是两张\(DAG\)重合部分中的最长链. ...
- 洛谷P2148 [SDOI2009]E&D(博弈论)
洛谷题目传送门 先安利蒟蒻仍在施工的博弈论总结 首先根据题目,石子被两两分组了,于是根据SG定理,我们只要求出每一组的SG值再全部异或起来就好啦. 把每一对数看成一个ICG,首先,我们尝试构造游戏的状 ...
- BZOJ1227或洛谷2154 [SDOI2009]虔诚的墓主人
BZOJ原题链接 洛谷原题链接 又是扫描线,题解可看大佬的博客(太懒了不想打) #include<cstdio> #include<algorithm> using names ...
- BZOJ1226或洛谷2157 [SDOI2009]学校食堂
BZOJ原题链接 洛谷原题链接 注意到\(B[i]\)很小,考虑状压\(DP\). 设\(f[i][j][k]\)表示前\(i - 1\)个人已经拿到菜,第\(i\)个人及其后面\(7\)个人是否拿到 ...
- [洛谷P1972][SDOI2009]HH的项链
题目大意:给你一串数字,多次询问区间内数字的种类数 题解:莫队 卡点:洛谷数据加强,开了个$O(2)$ C++ Code: #include <cstdio> #include <a ...
- 洛谷 P1972 [SDOI2009]HH的项链【莫队算法学习】
P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
- 洛谷 P2149 [SDOI2009]Elaxia的路线 解题报告
P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia ...
随机推荐
- JFreeChart DateAxis用法
http://blog.csdn.net/xiaozhendong123/article/details/50131513
- ZLYD团队第三周项目总结
ZLYD团队第三周项目总结 项目进展 我们的吃豆子游戏的程序由八个文件组成:Wall.java.Gold.java.Player.java.Fruit.java.Enemy.java.Ticker.j ...
- kotlin 学习感受
目录 kotlin 学习感受 特点 优点 屎一样的缺点 总结 kotlin 学习感受 直白的说..很不好,像屎一样,本来对此抱有很大的期望和好感度,但经过一整天的学习,完全失望了,这门语言中间有各种的 ...
- AIM Tech Round 5 (rated, Div. 1 + Div. 2)
A. Find Square 找到对角线的两个点的坐标,这道题就迎刃而解了. inline void work(int n) { int m; cin >> m; memset(str, ...
- Ethereum IDE
http://remix.ethereum.org/#optimize=false&version=builtin https://ethereum.github.io/browser-sol ...
- 五句话搞定JavaScript作用域【转】
JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走遍天下都不怕... 一.“JavaScript中无块级作用域” 在Java或C# ...
- TinyURL
2018-03-09 15:19:04 TinyURL,短地址,或者叫短链接,指的是一种互联网上的技术与服务.此服务可以提供一个非常短小的URL以代替原来的可能较长的URL,将长的URL地址缩短. 用 ...
- Java 集合-Collections工具类
2017-11-05 23:41:53 Collections类 Collections类:Collections类是针对集合进行操作的工具类,都是静态方法. 常用方法: public static ...
- n人围圈报数,报3出圈
题目:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位. Scanner scanner = new Scanner(System. ...
- Tornado源码分析 --- Etag实现
Etag(URL的Entity Tag): 对于具体Etag是什么,请求流程,实现原理,这里不进行介绍,可以参考下面链接: http://www.oschina.net/question/234345 ...