LOJ#2244 起床困难综合症
解:m = 0的部分分,直接模拟。有and 0的部分分,直接模拟。<=1000的部分分,枚举攻击力之后模拟。所有操作相同的部分分,可以合并成只有一个操作。然后枚举m或者逐位贪心。
正解是逐位贪心,内层跑一遍1~n个操作。然后后面这个1~n其实可以优化,在外层用00000...0和11111...1来一次性搞完即可。
#include <bits/stdc++.h> const int N = ; int a[N], opt[N], n, m;
char str[]; /// 0 AND & 1 OR | 2 XOR ^ namespace m0 {
inline void solve() {
int ans = ;
for(int i = ; i <= n; i++) {
if(opt[i] == ) {
ans = ans & a[i];
}
else if(opt[i] == ) {
ans = ans | a[i];
}
else if(opt[i] == ) {
ans = ans ^ a[i];
}
}
printf("%d\n", ans);
return;
}
} namespace bf {
inline void solve() {
int ans = ;
for(int i = ; i <= m; i++) {
int x = i;
for(int j = ; j <= n; j++) {
if(opt[j] == ) {
x = x & a[j];
}
else if(opt[j] == ) {
x = x | a[j];
}
else {
x = x ^ a[j];
}
}
ans = std::max(ans, x);
}
printf("%d\n", ans);
return;
}
} namespace same {
inline void solve() {
int x = a[];
for(int i = ; i <= n; i++) {
if(opt[i] == ) {
x = x & a[i];
}
else if(opt[i] == ) {
x = x | a[i];
}
else {
x = x ^ a[i];
}
}
int ans = ;
if(m <= ) {
for(int i = ; i <= m; i++) {
if(opt[] == ) {
ans = std::max(ans, i & x);
}
else if(opt[] == ) {
ans = std::max(ans, i | x);
}
else if(opt[] == ) {
ans = std::max(ans, i ^ x);
}
}
}
else {
int now = ;
for(int i = ; i >= ; i--) {
if(opt[] == ) {
if(((x >> i) & ) && (now | ( << i)) <= m) {
now |= ( << i);
}
}
else if(opt[] == ) {
if(((x >> i) & ) == && (now | ( << i)) <= m) {
now |= ( << i);
}
}
else {
if(((x >> i) & ) == && (now | ( << i)) <= m) {
now |= ( << i);
}
}
}
if(opt[] == ) {
ans = x & now;
}
else if(opt[] == ) {
ans = x | now;
}
else {
ans = x ^ now;
}
}
printf("%d\n", ans);
return;
}
} int main() {
bool flag1 = false, flag2 = true;
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++) {
scanf("%s%d", str, &a[i]);
if(str[] == 'O') opt[i] = ;
else if(str[] == 'X') opt[i] = ;
else if(a[i] == ) {
flag1 = true;
}
if(i > && opt[i] != opt[i - ]) {
flag2 = false;
}
} if(!m || flag1) {
m0::solve();
return ;
}
if(n <= && m <= ) {
bf::solve();
return ;
}
if(flag2) {
same::solve();
return ;
} int ans = , now = ;
for(int i = ; i >= ; i--) {
int t1 = , t0 = ;
for(int j = ; j <= n; j++) {
if(opt[j] == ) {
t0 &= (a[j] >> i) & ;
t1 &= (a[j] >> i) & ;
}
else if(opt[j] == ) {
t0 |= (a[j] >> i) & ;
t1 |= (a[j] >> i) & ;
}
else {
t0 ^= (a[j] >> i) & ;
t1 ^= (a[j] >> i) & ;
}
}
if(t0) {
ans |= ( << i);
}
else if(t1 && (now | ( << i)) <= m) {
now |= ( << i);
ans |= ( << i);
}
}
printf("%d\n", ans);
return ;
}
AC代码
LOJ#2244 起床困难综合症的更多相关文章
- BZOJ-3668 起床困难综合症 位运算+贪心
faebdc学长杂题选讲中的题目...还是蛮简单的...位运算写的不熟练... 3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 ...
- bzoj3668: [Noi2014]起床困难综合症
从高位到低位枚举期望的应该是ans最高位尽量取一.如果该数最高位为o的话能够取得1直接更新ans否则判断该位取1是否会爆m不会的话就加上. #include<cstdio> #includ ...
- NOI2014 起床困难综合症
3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 225 Solved: 153[Submit][Stat ...
- BZOJ 3668: [Noi2014]起床困难综合症( 贪心 )
之前以为xor,or,and满足结合律...然后连样例都过不了 早上上体育课的时候突然想出来了...直接处理每一位是1,0的最后结果, 然后从高位到低位贪心就可以了... 滚去吃饭了.. ------ ...
- BZOJ 3668: [Noi2014]起床困难综合症【贪心】
3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2326 Solved: 1305[Submit][St ...
- 【NOI2014】起床困难综合症(贪心)
[NOI2014]起床困难综合症(贪心) 题面 Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚 ...
- Luogu 睡觉困难综合征 ([NOI2014]起床困难综合症)
一.[NOI2014]起床困难综合症 题目描述 网址:https://daniu.luogu.org/problemnew/show/2114 大意: 有一条链,链上每一个节点包含一个位运算f 与 一 ...
- [BZOJ3668] [Noi2014] 起床困难综合症 (贪心)
Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...
- [NOI 2014]起床困难综合症
Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...
随机推荐
- elasticsearch health yellow
csdn博客地址(已测试过):https://blog.csdn.net/yangyangrenren/article/details/81100836 官方地址:https://www.elasti ...
- animate-queue和step-animate
Step-animate: 分为3部分:{配置},{step:function(){...},duration:1000} <div id="warpper" style=& ...
- Nginx Windows详细安装部署教程
一.Nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Ramble ...
- 微信分享大图遇到的问题(Android)
起因: 要做一个微信图片分享的功能,但是对于大图会如下问题: 当时没有仔细查看错误日志,单纯的以为是图片太大的问题. 分享图片代码: public void WXsharePic(String tra ...
- Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成) 动态表单生成 ElementUI官网引导 Element表单生成 Element动态增减表单,在线代码 关键配置 templa ...
- 浅谈SQL Server数据内部表现形式
在上篇文章 浅谈SQL Server内部运行机制 中,与大家分享了SQL Server内部运行机制,通过上次的分享,相信大家已经能解决如下几个问题: 1.SQL Server 体系结构由哪几部分组成? ...
- java中的重写与重载
重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类 ...
- c++11の泛型算法
一.泛型算法泛型算法这个概念是针对容器操作的,我们知道,c++11的顺序容器有vector,list,deque等,对于这些容器,c++11并没给出相应的增删改查方法,而是定义了一组泛型算法 一般的泛 ...
- var、let 及 const 区别
var console.log(a) // undefined var a = 1 从上述代码中我们可以发现,虽然变量还没有被声明,但是我们却可以使用这个未被声明的变量,这种情况就叫做提升,并且提升的 ...
- git 本地代码冲突解决,强制更新
git reset soft,hard,mixed之区别深解 git reset --hard 强制更新覆盖本地 GIT reset命令,似乎让人很迷惑,以至于误解,误用.但是事实上不应该如此难 ...