CF1257F Make Them Similar(meet in the middle,模拟退火)

前言

sto 退火大师_slb orz
sto 正解大师_KHIN orz
只有我啥也不会,哈哈。

有趣的是,两种方法我都想到了一部分,然后都寄掉了。
这有趣个锤子

解析

Sol1

考虑枚举最终的popcount,然后限制就变成了一个类似于高斯消元的形式。
但是和正常的高消不同的是,本题的所有变量都有值域限制(01变量)。
然后就尬住了(悲

考虑meet in the middle。
暴力枚举前15个01变量的取值,得到一个n元组,用map或哈希表存下。
再枚举后15个,得到另一个n元组,然后就可以求出与之唯一匹配的另一个n元组,在map中查询即可。
复杂度 O(30∗215∗n)O(30*2^{15}*n)O(30215n)

Sol2

由于需要考虑的变量只有30个,考虑模拟退火。
然后由于我的估价函数用的是极差,挂的很彻底(
(一部分也是因为我当时觉得退火在玩泥巴,没有认真思考)

极差的话很可能操作来操作去最后结果都是一样的,就很难受。
用方差就好了。

代码

//luogu
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned ll
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("ok\n")const int N=105;
const bool Flag=1;inline ll read() {ll x(0),f(1);char c=getchar();while(!isdigit(c)) {if(c=='-')f=-1;c=getchar();}while(isdigit(c)) {x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
bool mem1;int n,k;
int a[N][33],mi[N],x[N];
const int bas=71;
map<ull,int>mp;
int res1[N],res2[N];
void dfs1(int k,int s){if(k>15){ull h(0);for(int i=1;i<=n;i++) h=h*(bas)+res1[i]+31;//for(int i=1;i<=n;i++) printf("%d ",res1[i]);//printf("%d\n",s);mp[h]=s;return;}dfs1(k+1,s);for(int i=1;i<=n;i++){res1[i]+=a[i][k];}dfs1(k+1,s|(1<<(k-1)));for(int i=1;i<=n;i++){res1[i]-=a[i][k];}return;	
}
void dfs2(int k,int s){if(k>30){		ull h(0);for(int i=1;i<=n;i++) h=h*(bas)+res2[i]+31;		//for(int i=1;i<=n;i++) printf("%d ",res2[i]);//printf("%d\n",s);if(mp.count(h)){printf("%d\n",s+mp[h]);for(int i=1;i<=n;i++){assert(__builtin_popcount(x[i]^(s+mp[h]))==__builtin_popcount(x[1]^(s+mp[h])));}exit(0);}return;}dfs2(k+1,s);for(int i=1;i<=n;i++){res2[i]-=a[i][k];}dfs2(k+1,s|(1<<(k-1)));for(int i=1;i<=n;i++){res2[i]+=a[i][k];}return;
}
void check(int k){//printf("k=%d\n",k);memset(a,0,sizeof(a));for(int i=1;i<=n;i++){a[i][31]=k;//printf("  i=%d x=%d\n",i,x[i]);for(int j=1;j<=30;j++){if(x[i]&mi[j]){a[i][31]--;a[i][j]=-1;}else a[i][j]=1;}}//for(int i=1;i<=n;i++){//	for(int j=1;j<=31;j++) printf("%d ",a[i][j]);//	puts("");//}for(int i=1;i<=n;i++){res1[i]=0;res2[i]=a[i][31];}mp.clear();	dfs1(1,0);dfs2(16,0);return;
}bool mem2;
signed main() {#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);#endifn=read();for(int i=1;i<=n;i++){x[i]=read();if(__builtin_parity(x[i])!=__builtin_parity(x[1])){//printf("%d\n",i);puts("-1");return 0;}}mi[1]=1;for(int i=2;i<=30;i++) mi[i]=mi[i-1]<<1;for(int i=1;i<=30;i++)	check(i);puts("-1");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Find 3-friendly Integers

Find 3-friendly Integers 题意&#xff1a; 定义一个自然数是精妙的&#xff0c;如果他存在一个字串(允许前导0)是3的倍数 问L到R中精妙的数的个数 题解&#xff1a; 数位dp可以做(但我不会。。。) 用结论来做&#xff0c;当n>100时(即为3位数时)必然是精妙的数&#x…

【学习笔记】平等博弈及常见的公平博弈类型

文章目录平等博弈nim堆SG定理nim和常见的公平博弈模型bash博弈nim博弈nim-k博弈wythoff博弈扩展wythoff博弈fibonacci博弈阶梯博弈green hackenbushMisre Nim博弈Every-SGnim积翻棋子游戏游戏的积&#xff0c;tartan定理平等博弈 G{L∣R},LRG\{L|R\},LRG{L∣R},LR&#xff0c;所…

Excel催化剂开源第31波-pdf相关功能实现及类库介绍

在Excel催化剂刚推出的pdf相关功能中&#xff0c;反馈很热烈&#xff0c;不止是用户层面好多人喜欢&#xff0c;也听到在.NET开发群里有询问pdf在winform上展现的功能诉求&#xff0c;一段时间没写开源篇&#xff0c;生怕大家以为Excel催化剂太小气了&#xff0c;不再开发了&am…

CF1526D Kill Anton(暴力)

前言 我的证明&#xff1a;这似乎非常对啊。 。。。 解析 直观感受&#xff1a;字母交错出现非常愚蠢。 然后就猜对了 为什么&#xff1f; 考虑两个相同但不相邻的字符 Ti,TjT_i,T_jTi​,Tj​&#xff0c;对应位置为 pi,pjp_i,p_jpi​,pj​。 夹在中间的字符 kkk 无非三种可…

Minimum spanning tree HDU - 6954

Minimum spanning tree HDU - 6954 题意&#xff1a; 给定n-1个点&#xff0c;编号从2到n&#xff0c;两点a和b之间的边权重为lcm&#xff08;a&#xff0c;b&#xff09;。请找出它们形成的最小生成树。 2<n<10000000 题解&#xff1a; 这题一看就眼熟。。。这不是去…

[小技巧]ASP.NET Core中如何预压缩静态文件

原文地址&#xff1a;Pre-compressed static files with ASP.NET Core作者&#xff1a;Gunnar Peipman译者&#xff1a;Lamond Lu译文&#xff1a;https://www.cnblogs.com/lwqlun/p/10552131.html示例代码&#xff1a;https://github.com/lamondlu/CompressedStaticFileSample…

CF1494F Delete The Edges(欧拉回路)

前言 走远了走远了… 一直在想翻转一条链的奇偶性怎么做&#xff0c;但没有意识到最后一定是个菊花。 解析 一状态就是走一个欧拉回路&#xff0c;合法性更容易刻画&#xff0c;所以考虑反过来想&#xff0c;如何用状态二的走法删去一些边&#xff0c;使得剩下的图存在欧拉路…

【学习笔记】简单的连通性状压DP——插头DP(不学以为是天书)

文章目录哈希链表插头DP概念括号表示法 / 最小表示法例题洛谷插头dp板题CITYParkIITonys TourEfficient Tree[CQOI2015]标识设计哈希链表 众所周知&#xff0c;哈希是有冲突的可能性的&#xff0c;而且在状态数越多&#xff0c;冲突的概率就越高。目前掌握的处理方案有多哈希&…

H - Maximal submatrix HDU - 6957

H - Maximal submatrix HDU - 6957 题意&#xff1a; 给定一个n行m列的矩阵&#xff0c;求每列上面积不减的最大子矩阵 对于每个测试用例&#xff0c;打印一个表示最大子矩阵的整数 题解&#xff1a; 要求求一个最大面积的满足每列非递减的矩阵&#xff0c;这怎么想&#…

[NewLife.XCode]实体类详解

NewLife.XCode是一个有10多年历史的开源数据中间件&#xff0c;由新生命团队(2002~2019)开发完成并维护至今&#xff0c;以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析&#xff0c;蕴含多年开发经验于其中。开源地址&#xff1a;https://github.com/…

CF662C Binary Table(FWT_XOR卷积)

problem 洛谷链接 solution 第二次做的时候发现自己还是不会。发现自己没有写过题解&#xff0c;看来当时是没有完全搞懂的。 nnn 与 mmm 的量级相差很大&#xff0c;nnn 的范围是完全可以状压的。 不妨考虑枚举最后翻转了哪些行&#xff0c;将操作状压为一个数 XXX。 显然…

AT5662 [AGC040D] Balance Beam(二分)

前言 人类智慧&#xff0c;不可思议。 解析 考虑画出两个人的 S−TS-TS−T 折线图&#xff0c;那么答案如何表示&#xff1f; 可以理解成把 BBB 的图像不断下移&#xff0c;直到与 AAA 的图像只剩一个交点&#xff0c;此时在 xxx 轴的截矩就是答案。 设平移后 BBB 图像与 x…

Counting Triangles

Counting Triangles 题意&#xff1a; 给你一个完全图&#xff0c;每个边被赋值为0或1&#xff0c;问这个完全图中有多少个完美三角形&#xff1f; 完美三角形定义&#xff1a;三角形的三边都为0或1 题解&#xff1a; 正着求不好求&#xff0c;我们可以倒着想 不考虑完美&a…

程序员过关斩将--论商品促销代码的优雅性

点击上方蓝色字体&#xff0c;关注我们菜菜哥&#xff0c;YY说你帮她解决了几个问题&#xff0c;也帮我解决一个呗原来是D妹子&#xff0c;来坐我身边&#xff0c;说下情况我的项目是个电商项目&#xff0c;现在产品狗要给商品做活动正常呀我一个新手初来咋到顶不住压力了&…

[WC2018]州区划分(FWT_OR卷积)

problem 洛谷链接 solution 显然题目指向&#xff1a;存在欧拉回路的州划分是不合法的。 当且仅当这个州是 联通 的且 内部没有奇数度数的点 时&#xff0c;这个州不合法。 因为 nnn 非常小&#xff0c;我们可以枚举每一种州划分方案&#xff0c;判断是否合法&#xff0c;…

P5469 [NOI2019] 机器人(拉格朗日插值、区间dp)

解析 打表可得&#xff0c;有效状态大概只有 O(m)O(nlog⁡n)O(m)O(n\log n)O(m)O(nlogn) 种。 枚举最靠右的最大值位置&#xff0c;不难得到 O(mV)O(mV)O(mV) 的做法。 期望得分 505050 分。 考虑如何做 l0,r109l0,r10^9l0,r109。&#xff0c;发现前缀和后所有的 dpi,i,xxdp_…

Math(牛客多校第三场)

Math 题意&#xff1a; 问你有多少对(x,y),1<x<y<n,满足(x2 y2)%(xy1) 0 题解&#xff1a; 这种题。。。直接打表芜湖~ 通过打表发现&#xff1a;满足情况的为(i,i * i * i),但是也有不和谐的声音出现&#xff1a;当x8时&#xff0c;会出现两个&#xff0c;一个…

[NewLife.XCode]增删改查入门

NewLife.XCode是一个有10多年历史的开源数据中间件&#xff0c;由新生命团队(2002~2019)开发完成并维护至今&#xff0c;以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析&#xff0c;蕴含多年开发经验于其中。开源地址&#xff1a;https://github.com/…

P5472 [NOI2019] 斗主地(期望、数学)

前言 我咋连表都没打啊。 too vegetable。 解析 题目给出的洗牌形式看着并不好看&#xff0c;合理猜测可以发现&#xff0c;这其实就等价于所有可能情况等概率出现。 然后就不会了 打表可以发现&#xff1a;当 tp1 时&#xff0c;dp 数组是一个等差数列。当 tp2 时&#xff…

[HNOI2012]集合选数(思维构造 + 状压dp)

problem 题目链接 solution 从最小一个数 xxx 开始&#xff0c;将其 2x,3x2x,3x2x,3x 放入&#xff0c;再将 2(2x),3(2x),2(3x),3(3x)2(2x),3(2x),2(3x),3(3x)2(2x),3(2x),2(3x),3(3x) 放入&#xff0c;以此类推 …\dots… 将其合并为一个集合。重复又找一个最小未进入集合的…