Codeforces 878A - Short Program(位运算)
原题链接:http://codeforces.com/problemset/problem/878/A
题意:给出n个位运算操作, 化简这些操作, 使化简后的操作次数不多于5步。
思路:我们可以对二进制每一位上的1, 0, 进行讨论,
如果n次操作后1 -->1, 0 --> 1, 说明这一位要用或操作(or 1)
类似的,1 -->0, 0 -->1, 说明这一位要用异或操作(xor 1)
1 -->0, 0 -->0, 说明这一位要用与操作(and 0)
1 -->1, 0 -->0,前后不变,可以不用进行操作。
其中,and 0 操作可以用 or 1 xor 1代替, 那么最后化简后的操作次数不会超过 2 次。
AC代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<string>
using namespace std;
typedef long long LL;
int XOR, OR;
int p[];
int b1,b2;
char ch[];
int num[][];
int cal(int b, int j, int i){
if(ch[j]=='|') return b|num[j][i];
if(ch[j]=='&') return b&num[j][i];
else return b^num[j][i];
}
int main()
{
int n,m;
p[]=;
for(int i=;i<;i++) p[i]=p[i-]*;
while(cin>>n)
{
XOR=OR=;
memset(num, , sizeof(num));
for(int i=;i<n;i++){
scanf(" %c %d", &ch[i], &m);
int t=;
while(m){
if(m&) num[i][t]=;
t++;
m>>=;
}
}
for(int i=;i<;i++){
b1=,b2=;
for(int j=;j<n;j++){
b1=cal(b1, j, i);
b2=cal(b2, j, i);
}
if(b1==&&b2==){//n and 1 相当于 n or 1 xor 1
OR^=p[i];
XOR^=p[i];
}
if(b1==&&b2==) OR^=p[i];
if(b1==&&b2==) XOR^=p[i];
}
int sum=;
if(OR) sum++;
if(XOR) sum++;
cout<<sum<<endl; if(OR) cout<<'|'<<' '<<OR<<endl;
if(XOR) cout<<'^'<<' '<<XOR<<endl;
}
}
Codeforces 878A - Short Program(位运算)的更多相关文章
- Codeforces Round #443 (Div. 2) C: Short Program - 位运算
传送门 题目大意: 输入给出一串位运算,输出一个步数小于等于5的方案,正确即可,不唯一. 题目分析: 英文题的理解真的是各种误差,从头到尾都以为解是唯一的. 根据位运算的性质可以知道: 一连串的位运算 ...
- Codeforces 879C/878A - Short Program
传送门:http://codeforces.com/contest/879/problem/C 本题是一个位运算问题——位运算的等价变换. 假设位运算符“&”“|”“^”是左结合的,且优先级相 ...
- Codeforces 868D Huge Strings - 位运算 - 暴力
You are given n strings s1, s2, ..., sn consisting of characters 0 and 1. m operations are performed ...
- codeforces - 15C Industrial Nim(位运算+尼姆博弈)
C. Industrial Nim time limit per test 2 seconds memory limit per test 64 megabytes input standard in ...
- Codeforces 868C Qualification Rounds - 位运算
Snark and Philip are preparing the problemset for the upcoming pre-qualification round for semi-quar ...
- CodeForces - 1230D(思维+位运算)
题意 https://vjudge.net/problem/CodeForces-1230D 要组建一个小组,要求小组中每个人都不比所有人强,当一个人懂得一个算法但是另一个不懂那么前者认为他比后者强. ...
- Codeforces Round #443 (Div. 1) A. Short Program
A. Short Program link http://codeforces.com/contest/878/problem/A describe Petya learned a new progr ...
- Codeforces Round #879 (Div. 2) C. Short Program
题目链接:http://codeforces.com/contest/879/problem/C C. Short Program time limit per test2 seconds memor ...
- Codeforces Round #443 (Div. 2) C. Short Program
C. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
随机推荐
- MACBOOK蓝牙连接丢失恢复
MACBOOK用户可能会碰到一个神奇而无奈的问题: 某些情况下,很多时候从睡眠状态回来,会发现蓝牙设备再也无法连接,包括蓝牙鼠标.键盘等等... 恢复方法一般是,重启或注销后重新登陆,然后所有工作现场 ...
- 【MM系列】SAP 物料进销存报表查看
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]在SAP里查看数据的方法 前言部 ...
- LeetCode算法题-Maximize Distance to Closest Person(Java实现)
这是悦乐书的第328次更新,第351篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第198题(顺位题号是849).在一排座位中,1表示一个人坐在该座位上,0表示座位是空的 ...
- 【HBase】四、HBase的安装及命令行接口
通过前面的介绍,对HBase数据模型,运行机制等理论基本了解,接下来从实践的角度介绍HBase的安装以及其各种接口的使用方法. 1.HBase的安装 HBase安装很简单,和所有的Hadoop ...
- 25. Reverse Nodes in k-Group[H]k个一组翻转链表
题目 Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. ...
- Java基础语法-运算符
1算术运算符 1.1运算符和表达式 运算符:对常量和变量进行操作的符号. 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式. 不同运算符链接的表达式体现的是不同类型的表达式 ...
- 006 Notepad++ 运行 C/C++
目录 0. 前言 1. 准备 2. 开工 setp 1 step 2 step 3 step 4 step 5 step 6 3. 修改与删除 3.1修改名称.快捷键 3.2 删除 4. 运行 5. ...
- Vue切换页面时中断axios请求
一.概述 在Vue单页面开发过程中,遇到这样的情况,当我切换页面时,由于上一页面请求执行时间长,切换到该页面时,还未执行完,这时那个请求仍会继续执行直到请求结束,此时将会影响页面性能,并且可能对现在页 ...
- WordPress用户的权限类
WordPress的权限类这是管理 WordPress 用户权限最常用的函数.WordPress 用于角色和权限幕后工作的三个类,以及这些类提供的接口,我们可以在插件中进行高级权限管理.这三个类是: ...
- Spring基础18——通过注解配置bean之间的关联关系
1.组件装配 <context:component-scan>元素还会自动注册AutowiredAnnotaionBeanPostProcessor实例,这是一个bean的后置处理器,该实 ...