51nod 1824 染色游戏

2024-02-04 18:20
文章标签 游戏 51nod 染色 1824

本文主要是介绍51nod 1824 染色游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

这里写图片描述

Data Constraint

1 n, m <220

Solution

首先对 r b都作模2操作。
首先有

fx=i=0xCixribxi mod 2

fx 等于 1 则说明fx将对答案贡献 x2
接着考虑 Cix 在什么条件下满足 Cix mod 2 = 1
我们可以通过Lucas定理或 Krumer 定理推得它的充分必要条件为
i or x=i (或者 i and (xi)=0 )
x and y=0 ,那么也一定会有 x + y=x or y

于是我们可以得到

fx or y=rxby[x and y=0] mod 2

转换一下也就可以得到
fx or y=rxby[bits(x)+bits(y)=bits(x+y)] mod 2

其中 bits ( x )表示x在二进制下有多少位为 1

这下就简单了,我们按照数的bits值分成 logn+m 组,每一组单独求一次 FWT ,求或卷积的时候直接 log2n+m 暴力枚举组和组之间的卷积在逆 FWT 即可。

由于常数较大,做的时候需要卡卡常,比如说模 2 意义下的加减都可以看成异或(FWT的或卷积只有加减运算),同时需要压位,显然我们可以一段数一起异或,于是便把这一段数压成一个数再做 FWT 即可(当然,这段数的长度必须为 2 的幂次)。

时间复杂度为O( n log22 n <script type="math/tex" id="MathJax-Element-313">n</script>)。

Code

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>#define fo(i,j,l) for(int i=j;i<=l;++i)
#define fd(i,j,l) for(int i=j;i>=l;--i)using namespace std;
typedef long long ll;
const ll N=22e5,M=23,K=2e5,ws=16,R=4,P=7e4,zd=65536;
int a[N],b[N],c[N],t[N],ans[N],c1[N],n,m,zg,bj,dq;
int f[M][K],g[M][K],bits[N],op[M],dy[65550];inline int read()
{int o=0; char ch=' ';for(;ch<'0'||ch>'9';ch=getchar());return ch-48;
}inline int fj(int o)
{int y=1,p=0;for(;y<=o;y<<=1,++p);return p;
}inline void tf_or(int *a)
{for(int m=2;m<=zg+1;m<<=1){int half=m>>1;for(int j=0;j<=zg;j+=m)fo(l,0,half-1)a[l+half+j]^=a[l+j];}
}inline void high_tf_or(int *a)
{int re=(zg+1)>>4;for(int m=2;m<=re;m<<=1){int half=m>>1;for(int j=0;j<re;j+=m)fo(l,0,half-1)a[(l^half)+j]^=a[l+j];}
}inline int bh(int oo)
{fd(i,15,0)op[i]=oo&1,oo>>=1;for(int m=2;m<=16;m<<=1){int half=m>>1;for(int j=0;j<16;j+=m)fo(l,0,half-1)op[l+j+half]^=op[l+j];}int y=0;fo(i,0,15)y=(y*2)+op[i];return y;
} int main()
{cin>>n>>m;fo(i,0,zd-1)if(!dy[i])dy[i]=bh(i),dy[dy[i]]=i;a[0]=b[0]=1;fo(i,1,n)a[i]=read(),a[i]&=1;fo(i,1,m)b[i]=read(),b[i]&=1;int len=fj(n+m);zg=(1<<len)-1; bj=len>8;if(bj)dq=zg>>R;else dq=zg;fo(i,0,zg)bits[i]=bits[i>>1]+(i&1);fo(l,0,len){fo(i,0,zg)if(bits[i]==l)c[i]=a[i];else c[i]=0;if(bj==0){tf_or(c);fo(i,0,zg)f[l][i]=c[i];}else{fo(i,0,dq){t[i]=0;fo(j,(i<<R),((i+1)<<R)-1)t[i]=(t[i]<<1)+c[j];}fo(i,0,dq)t[i]=dy[t[i]];high_tf_or(t);fo(i,0,dq)f[l][i]=t[i];}fo(i,0,zg)if(bits[i]==l)c[i]=b[i];else c[i]=0;if(bj==0){tf_or(c);fo(i,0,zg)g[l][i]=c[i];}else{fo(i,0,dq){t[i]=0;fo(j,(i<<R),((i+1)<<R)-1)t[i]=(t[i]<<1)+c[j];}fo(i,0,dq)t[i]=dy[t[i]];high_tf_or(t);fo(i,0,dq)g[l][i]=t[i];}}fo(l,0,len){fo(j,0,dq)t[j]=0;fo(i,0,l)fo(j,0,dq)t[j]^=f[i][j]&g[l-i][j];if(!bj){fo(j,0,dq)c[j]=t[j];tf_or(c);}else{fo(j,0,dq)t[j]=dy[t[j]];high_tf_or(t);fo(i,0,dq)fd(j,15,0)c[(i<<4)^j]=t[i]&1,t[i]>>=1;}fo(i,0,zg)if(bits[i]==l)ans[i]^=c[i];}ll answer=0;fo(i,1,zg)if(ans[i])answer=answer+(ll)i*((ll)i);printf("%lld",answer);
}

这篇关于51nod 1824 染色游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/678401

相关文章

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

第四次北漂----挣个独立游戏的素材钱

第四次北漂,在智联招聘上,有个小公司主动和我联系。面试了下,决定入职了,osg/osgearth的。月薪两万一。 大跌眼镜的是,我入职后,第一天的工作内容就是接手他的工作,三天后他就离职了。 我之所以考虑入职,是因为 1,该公司有恒歌科技的freex平台源码,可以学学,对以前不懂的解解惑。 2,挣点素材钱,看看张亮002的视频,他用了6000多,在虚幻商城买的吸血鬼游戏相关的素材,可以玩两年。我

nyoj 1038 纸牌游戏

poj 的一道改编题,说是翻译题更恰当,因为只是小幅度改动。 一道模拟题,代码掌控能力比较好,思维逻辑清晰的话就能AC。 代码如下: #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{char c[5];int rk;char da[5];int nu

如果出一个名叫白神话悟空的游戏

最近黑神话由于与原著不符引起了原著派的争议。 所以我在摸鱼的时候想到如果游科或者某个别的公司“痛改前非”不夹带私货完全复刻吴承恩百回版剧情制作一个“重走西游路”的游戏,会有一个什么样的销量?(设定为原著派已经多方渠道认证,此游戏的确没有夹带私货,绝大部分复刻了原著剧情) 游戏玩法我想了几类 超长线性有岔路蜈蚣形状地图,蜈蚣的腿部是探索区域和支线,重走西游路线,开篇就是开始取经前唐玄宗御弟cg

《黑暗之魂2:原罪学者》是什么类型的游戏 《黑暗之魂》可以在苹果Mac电脑上玩吗?

在宏大的世界观游戏中,《黑暗之魂2:原罪学者》脱颖而出,以其探索性和挑战性征服了全球玩家的心灵。下面我们来看看《黑暗之魂2:原罪学者》是什么类型的游戏,《黑暗之魂2:原罪学者》可以在苹果电脑玩吗的相关内容。 一、《黑暗之魂2:原罪学者》是什么类型的游戏 《黑暗之魂2:原罪学者》作为《黑暗之魂2》的增强版和重制版,是一款FromSoftware制作、BANDAI NAMCO和FromSoft

简单取石子游戏~博弈

很坑爹的小游戏,至于怎么坑爹,嘎嘎~自己研究去吧~! #include<stdio.h>#include<windows.h>#include<iostream>#include<string.h>#include<time.h>using namespace std;void Loc(int x,int y);/*定位光标*/void Welcome(); /*创建欢迎界面*/

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑