建议去uoj那里去测,数据比较强 位运算的题目,就得一位一位的分开考虑 然后枚举初始值的最高位是0 是1 的最终攻击 (二进制内)最高位是1肯定比次位是1次次位是1次次次位是1···的大吧,显然 然后贪心O(N)就能过去啦 感觉自己是学傻了,看到n=5w就写了个nlog 情况好像有某一位的初始值是0最终那一位是1,初始值是1,最终那一位也是1的,所以要注意一下 代码: (咦,好像别人家的代码呀) #include <iostream> #include <cstdio> #incl…
点此看题面 大致题意: 给定一些位运算操作,让你在\(0\sim m\)范围内选一个初始值,使其在经过这些运算后得到的结果最大. 前置技能:关于位运算 作为一道位运算的题,如果你不知道什么是位运算,那就完全做不了了. 关于位运算可以详见这篇博客:位运算相关(一)--位运算学习笔记. 接下来,我们还要了解位运算的一个性质:即位运算的各数位之间是互不影响的. 根据这个性质,我们就可以得出一个大致思路了. 大致思路 由于位运算时各数位是相互独立的,因此对于各数位,其实只有两种情况:\(0\)或\(1\…
题目传送门 所以NOI的题现在简单惹? 30分做法:枚举开始的权值,n²过掉. 100分做法:竟然是贪心qwq.因为我们的计算背景是二进制下,所以我们贪心地想让每一位都是1.我们现在需要解决的问题,就是找到一个开始的攻击值.所以我们可以按位检查一下当前位是否可以为1,能不能更新答案. Code #include<cstdio> #include<algorithm> using namespace std; typedef long long ll; ll lmax(ll a,ll…
题目链接 给出n个数, 每个数有特定的一种操作, &|^三种, 给出一个m, 初始值属于[0,m],选定一个初始值, 使所有操作做完之后的值最大, 输出这个最大值. 1, 从最高位贪心, 如果初始这一位为0的时候, 所有操作进行完之后结果为1, 那么这一位就已经确定位0. 2, 初始为0, 如果所有操作进行完之后这一位为0, 那么就试初始为1的条件. 设当前位是第pos位, 如果之前已经有的数加上(1<<pos)小于m, 那么这一位为1就是可以的. 当初始为1的时候, 所有操作进行完之…
思路:按位贪心. 提交:1次 题解: 可以先处理出对于全$0$串和全$1$串最后每一位的结果.(每一位 从 $0$ $or$ $1$ 变成 $0$ $or$ $1$) 对于每一位,若不能变成$1$,则不选: 若可以变成$1$,优先让$0$变成$1$(使代价尽量小):若不能让$0$变成$1$,则$1$变成$1$(不变$qwq$) 代码: #include<cstdio> #include<iostream> using namespace std; #define ull unsig…
题目分析: 按位处理即可 代码: #include<bits/stdc++.h> using namespace std; ; int n,m; int a[maxn],b[maxn]; void work(){ ; ;i>=;i--){ <<i)+z > m)continue; <<i),r=; ;i<=n;i++){ ) l = (l&b[i]),r = (r&b[i]); ) l = (l|b[i]),r = (r|b[i]);…
题面 传送门:https://www.luogu.org/problemnew/show/P2114 Solution 一道很有意思的位运算题. 要做这一题,我们首先得了解一个很重要的特点 位运算过程中每一位都不会进位 有了这个特点,我们可以考虑一个很妙的做法 我们可以把每一扇门的那个数转为2进制 就可以在O(n) 的时间内找到这一位以1或0为初始数,过完所有门后的这位数的结果 显然,结果为1是对答案有贡献的 然后,我们从后往前,一位一位枚举看一下初始值是填1还是填0 然后就OjbK了 时间复杂…
P2114 [NOI2014]起床困难综合症 题目描述 21世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因: 在深邃的太平洋海底中,出现了一条名为drd的巨龙,它掌握着睡眠之精髓,能随意延长大家的睡眠时间. 正是由于drd的活动,起床困难综合症愈演愈烈, 以惊人的速度在世界上传播.为了彻底消灭这种病,atm决定前往海底,消灭这条恶龙.历经千辛万苦,atm终于…
P2114 [NOI2014]起床困难综合症 题目描述 21世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因: 在深邃的太平洋海底中,出现了一条名为drd的巨龙,它掌握着睡眠之精髓,能随意延长大家的睡眠时间. 正是由于drd的活动,起床困难综合症愈演愈烈, 以惊人的速度在世界上传播.为了彻底消灭这种病,atm决定前往海底,消灭这条恶龙.历经千辛万苦,atm终于…
P2114 [NOI2014]起床困难综合症 我们开始设俩数,一个二进制表示全是1,另一个全是0(就是2147483647 和 0 辣) 蓝后跑一遍门 于是最后有4种情况 1->0,1->1,0->1,0->0 于是我们最后贪心取一下就好辣 #include<iostream> #include<cstdio> #include<cstring> using namespace std; ,R=,ans; ]; int main(){ scanf…