CodeForces 768E SG函数 整数划分 Game of Stones
2024-09-05 03:27:00
一个标准的NIM游戏 加上一条规则:每堆石子对于每个数目的石子只能被取一次
可以SG打表
dp[i][j]表示现在有i个石子 j是可以取的石子数的状压 第i位为1就表示i个石子没被取过
#include <cstdio>
#include <cstring> bool vis[]; int mex() {
for(int i = ; ; i++) if(!vis[i]) return i;
} int sg[][ << ]; int main()
{
memset(sg, -, sizeof(sg));
for(int i = ; i < ( << ); i++) sg[][i] = ;
for(int i = ; i <= ; i++) {
sg[i][] = ;
for(int j = ; j < ( << ); j++) {
memset(vis, false, sizeof(vis));
for(int k = ; k < i; k++) if((j >> k) & )
vis[sg[i - k - ][j ^ ( << k)]] = true;
sg[i][j] = mex();
}
} for(int i = ; i <= ; i++)
printf("i = %d: sg = %d\n", i, sg[i][( << i) - ]); return ;
}
打表找到规律数X的SG值就是该数最多能被多少个整数划分 即找到最大的Y 使得sum(1~Y)<=X Y即为数X的SG值
#include<iostream>
#include<cstdio>
using namespace std;
int n,ans;
int main()
{
int i,j,p;
cin>>n;
for(i=;i<=n;i++)
{
scanf("%d",&p);
for(j=;j*(j+)/<=p;j++);
ans^=j-;
}
ans?puts("NO"):puts("YES");
}
最新文章
- Ubuntu16.04安装Samba
- C#实现WinForm窗体逐渐显示效果
- Ajax.ActionLink打开页面之后,表单验证失效
- Linux命令笔记(一)
- 攻城狮在路上(叁)Linux(二十七)--- 压缩与打包之常见的压缩命令
- 重构第29天 去除中间人对象(Remove Middle Man)
- Android 解决图片大量下载:软引用必须懂4点
- Spark实践的阶段性总结
- 解决WebSocket兼容ie浏览器版本问题
- Bilibili/DanmakuFlameMaster: Android开源弹幕引擎&#183;烈焰弹幕使 ~ JNI source:Bilibili/NativeBitmapFactory
- Windows服务器防火墙配置规范
- 看我如何未授权登陆某APP任意用户(token泄露实例)
- 万能poi导入功能模板
- 【转】[MySQL复制异常]Cannot execute statement: impossible to write to binary log since statement is in row for
- oracle EBS上传和下载文件(转)
- javascript callee和caller
- 复杂度分析 quick sort&;merge sort
- rocketmq学习
- Xcode 7安装KSImageNamed 不启作用
- 应用SVN比较文件定位修改