P4424 [HNOI/AHOI2018]寻宝游戏 某大学每年都会有一次Mystery Hunt的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生的你,对这个活动非常感兴趣.你每天都要从西向东经过教学楼一条很长的走廊,这条走廊是如此的长,以至于它被人戏称为infinite corridor.一次,你经过这条走廊时注意到在走廊的墙壁上隐藏着nn 个等长的二进制的数字,长度均为mm .你从西向东将这些数字记录了下来,形成一个含有nn 个数的二进制…
题意 题目链接 Sol 神仙题Orz Orz zbq爆搜70.. 考虑"与"和"或"的性质 \(0 \& 0 = 0, 1 \& 0 = 0\) \(0 \mid 1 = 1, 1 \mid 1 = 1\) 也就是说某一个数\(\& 0\)之后不管之前是什么,现在的值变为\(0\) 某一个数\(\mid 1\)之后不管之前的是什么,现在的值变为\(1\) 继续考虑 \(0 \& 1 = 0, 1 \& 1 = 1\) \(0…
题目 洛谷 4424 分析 感觉思路比较神仙. 对于按位与和按位或两种运算,显然每一位是独立的,可以分开考虑. 对于某一位,「与 \(0\)」会将这一位变成 \(0\),「或 \(1\)」会将这一位变成 \(1\) ,「与 \(1\)」和「或 \(0\)」不会改变这一位的值.前两种操作会改变这一位的值,而后两种不会.将前两种称为「关键操作」,那么某一位最终的值取决且仅取决于这一位的最后一次「关键操作」是「与 \(0\)」还是「或 \(1\)」.如果是前者或者不存在关键操作,最终的值就是 \(0\…
点此看题面 大致题意: 给你\(n\)个\(m\)位二进制数.每组询问给你一个\(m\)位二进制数,要求你从\(0\)开始,依次对于这\(n\)个数进行\(and\)或\(or\)操作,问有多少种方案能够得到给你的这个二进制数. 找规律 不难想到去对每一位分别讨论. 则根据位运算法则可得: 当你把某一位的数\(and\ 0\),就相当于把这一位数赋值为\(0\). 当你把某一位的数\(or\ 1\),就相当于把这一位数赋值为\(1\). 当你把某一位的数\(and\ 1\)或者\(or\ 0\)…
https://www.lydsy.com/JudgeOnline/problem.php?id=5285 https://www.luogu.org/problemnew/show/P4424 http://uoj.ac/problem/384 洛谷的题解已经很把思想过程完备地表达出来了:https://kelin.blog.luogu.org/solution-p4424 感觉比官方题解说的还清楚. 那么问题就是我们到底应该如何实现这个算法呢? 一个直观的想法是把每一位的数全部处理出来,然后…
问题描述 一次小G和小H在玩寻宝游戏,有n个房间排成一列,编号为1,2,...,n,相邻的房间之间都有一道门.其中一部分门上锁(因此需要有对应的钥匙才能开门),其余的门都能直接打开.现在小G告诉了小H每把锁的钥匙在哪个房间里(每把锁有且只有一把钥匙与之对应),并作出p次指示:第i次让小H从第\(S_i\)个房间出发到\(T_i\)个房间里.但是小G有时会故意在指令中放入死路,而小H也不想浪费多余的体力去尝试,于是想事先调查清楚每次的指令是否会存在一条通路. 你是否能为小H作出解答呢? 输入格式…
题目大意:给定 N 个操作,每个操作为按位与.或.异或一个固定的数字,现在要求从 0 到 M 中任选一个数字,使得依次经过 N 个操作后的值最大. 题解:位运算有一个重要的性质是:位运算时,无进位产生,每一位之间相互独立.因此,可以从高到低依次考虑每一位对答案的贡献值,计算每一位经过这 N 个操作后的值,比较后更新答案贡献即可. 代码如下 #include <bits/stdc++.h> using namespace std; const int maxn=1e5+10; int n,m;…
题目描述 21世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因: 在深邃的太平洋海底中,出现了一条名为drd的巨龙,它掌握着睡眠之精髓,能随意延长大家的睡眠时间. 正是由于drd的活动,起床困难综合症愈演愈烈, 以惊人的速度在世界上传播.为了彻底消灭这种病,atm决定前往海底,消灭这条恶龙.历经千辛万苦,atm终于来到了drd所在的地方,准备与其展开艰苦卓绝的…
呃...这道题算是noi中比较简单的题吧...... 众所周知,位运算是个好东西,它就是对应的位进行运算,跟其他的位没有关系. 我们要选取一个m值使最后的攻击力最大,对于这个m,从高位开始枚举,判断该位选0更优还是选1更优,怎么判断呢?把该位进行n次运算不就行了吗,看最后的数是1还是0. .................位运算中的DP? 1 #include<bits/stdc++.h> 2 using namespace std; 3 pair<string,int> a[10…
题意 题目链接 Sol 每当出题人想起他出的HNOI 2018 Day2T3,他都会激动的拍打着轮椅 读题比做题用时长系列... \(f[i][a][b]\)表示从根到\(i\)的路径上,有\(a\)条公路未被翻修,\(b\)条铁路未被翻修 然后xjb转移一下 比较好奇为啥不会MLE.. #include<bits/stdc++.h> #define LL long long using namespace std; const int MAXN = 1e5 + 10; const LL IN…