HNOI2014题解及数据,包括标程及试题
明显的组合游戏,暴力N^2求出所有的状态的SG值,复杂度就是O(N^2) 可以70分
然而我们发现在可以分开枚举:最小的数字小于等于sqrt(N),分割的数目小于sqrt(N)所以可以做到O(Nsqrt(N))可以过掉本题,不过很多细节需要处理确实比较恶心
code:
#include
#include
#include
#include
#define MAXN 100010
int f,n,m,T,a,g,ans,now;
using namespace std;
int sg[MAXN],vis[MAXN];
int init(){
scanf("%d%d",&T,&f);
for (int i=0;i
for (int i=f;i<=MAXN-10;i++){
int q=(int)ceil(sqrt(i));
for (int j=1;j
int a=j,b=j+1;
int x=i/a, y=i-x*a;
x-=y;
now=sg[(x&1)*a]^sg[(y&1)*b];
vis[now]=i;
if (a%2 && x>=b){
vis[now^sg[b]]=i;
}
if (a%2==0 && b*(y+a)<=i){
vis[now^sg[a]]=i;
}
}
for (int m=2;m<=q;m++){
int a=i/m,b=a+1;
int y=i-a*m,x=m-y;
vis[sg[(x&1)*a]^sg[(y&1)*b]]=i;
}
for (int j=0;j<=MAXN-10;j++){
if (vis[j]!=i){
sg[i]=j;
break;
}
}
}
return 0;
}
int main()
{
init();
while (T--){
scanf("%d",&n);
ans=0;
int x;
for (int i=1;i<=n;i++){
scanf("%d",&x);
ans=ans^sg[x];
}
printf("%d%c",ans?1:0,T?' ':'
');
}
return 0;
}
未经书面许可,严禁将本网内容作为AI训练资源。
33台词PC版 0.1
文件批量改名Bulk Rename Utility v3.4.1 中文绿色版
PDF快转(SanPDF) v2.0.6.66 官方版
菲菲更名宝贝之得意非凡FFRenamePro V4.0专业版
查找大文件(WizTree) v3.35 绿色版
文件比较查重工具WinMerge v2.16.8.0 中文版
Windows文件管理器(WinNc) v9.4.0.0 官方安装版
文件压缩档案提取(Explzh) v8.18 官方版
WinMerge v2.16.7.0 官方多语中文版
UltraCompare文件比较工具汉化修正中文版 V21.10.0.20免费64位注册码绿色版
文档自动转换工具BlackIce BiBatchConverter v4.80.632 官方版
批量文本文件处理器 V1.4绿色版
MAXHUB文档客户端 v1.3.1官方PC版
文件校验工具(EF CheckSum Manager) v20.02 官方版
全速pdf转换成excel转换器 v7.8.0.0官方版