443 C. Short Program
http://codeforces.com/contest/879/problem/C
Petya learned a new programming language CALPAS. A program in this language always takes one non-negative integer and returns one non-negative integer as well.
In the language, there are only three commands: apply a bitwise operation AND, OR or XOR with a given constant to the current integer. A program can contain an arbitrary sequence of these operations with arbitrary constants from 0 to 1023. When the program is run, all operations are applied (in the given order) to the argument and in the end the result integer is returned.
Petya wrote a program in this language, but it turned out to be too long. Write a program in CALPAS that does the same thing as the Petya's program, and consists of no more than 5 lines. Your program should return the same integer as Petya's program for all arguments from 0 to 1023.
The first line contains an integer n (1 ≤ n ≤ 5·105) — the number of lines.
Next n lines contain commands. A command consists of a character that represents the operation ("&", "|" or "^" for AND, OR or XOR respectively), and the constant xi 0 ≤ xi ≤ 1023.
Output an integer k (0 ≤ k ≤ 5) — the length of your program.
Next k lines must contain commands in the same format as in the input.
3
| 3
^ 2
| 1
2
| 3
^ 2
3
& 1
& 3
& 5
1
& 1
3
^ 1
^ 2
^ 3
0
You can read about bitwise operations in https://en.wikipedia.org/wiki/Bitwise_operation.
Second sample:
Let x be an input of the Petya's program. It's output is ((x&1)&3)&5 = x&(1&3&5) = x&1. So these two programs always give the same outputs.
题意:给出一段程序,只有三种操作,^ & |,然后让你输出一段不超过5行的程序使得运算结果和给出程序的运算结果相同
这题注意几点:
1.母数用000000不够,还需要与1111111结合,将其经过处理后数的每一位发生变化 0->? 1->?,
所以对于每个处理的数位我们有:
(0->0,1->0)none
(0->1,1->1)or 1
(0->1,1->0) xor 1
(0->0,1->1) and 1
2.位运算处理数后保持原样的操作有这三个 & 1 | 0 ^ 0
3.复习下位运算的优先级 AND>XOR>OR
#include <bits/stdc++.h>
using namespace std;
#define maxn 100000
typedef long long ll;
#define inf 2147483647
#define ri register int int n, x;
char ch;
int f0 = , f1 = ;
int AND = , XOR = , OR = ; int main() {
ios::sync_with_stdio(false);
// freopen("test.txt", "r", stdin);
// freopen("outout.txt","w",stdout);
cin >> n;
for (int i = ; i <= n; i++) {
cin >> ch >> x;
if (ch == '|') {
f0 |= x;
f1 |= x;
}
if (ch == '&') {
f0 &= x;
f1 &= x;
}
if (ch == '^') {
f0 ^= x;
f1 ^= x;
}
}
int base = ;
int w0, w1; for (int i = ; i <= ; i++) {
w0 = f0 & ;
w1 = f1 & ;
if (w0 == ) {
if (w1 == )
AND += base;
} else {
if (w1 == ) {
AND += base;
XOR += base;
} else {
AND += base;
OR += base;
}
}
base <<= ;
f0 >>= , f1 >>= ;
}
cout << << endl
<< "& " << AND << endl
<< "^ " << XOR << endl
<< "| " << OR << endl; return ;
}
443 C. Short Program的更多相关文章
- 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 ...
- 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]Div2 C Short Program
给你一串$n$个按顺序的位运算操作(&,|,^),形如"opt x",要求用不超过5行的位运算,按顺序操作出来和那个结果是一样的.$(n<=5e5,0<=x&l ...
- 【Codeforces Round #443 (Div. 2) C】Short Program
[链接] 我是链接,点我呀:) [题意] 给你一个n行的只和位运算有关的程序. 让你写一个不超过5行的等价程序. 使得对于每个输入,它们的输出都是一样的. [题解] 先假设x=1023,y=0; 即每 ...
- Codeforces Round #443 (Div. 2) C: Short Program - 位运算
传送门 题目大意: 输入给出一串位运算,输出一个步数小于等于5的方案,正确即可,不唯一. 题目分析: 英文题的理解真的是各种误差,从头到尾都以为解是唯一的. 根据位运算的性质可以知道: 一连串的位运算 ...
- Codeforces878 A. Short Program
题目类型:位运算 传送门:>Here< 题意:给出\(N\)个位运算操作,要求简化操作数量,使之结果不受影响(数据在1023之内) 解题思路 我们发现数字的每一位是独立的.也就是说,每一个 ...
- Codeforces 879C/878A - Short Program
传送门:http://codeforces.com/contest/879/problem/C 本题是一个位运算问题——位运算的等价变换. 假设位运算符“&”“|”“^”是左结合的,且优先级相 ...
- Codeforces 878A - Short Program(位运算)
原题链接:http://codeforces.com/problemset/problem/878/A 题意:给出n个位运算操作, 化简这些操作, 使化简后的操作次数不多于5步. 思路:我们可以对二进 ...
随机推荐
- p2p登录拦截
1.编写拦截标签 package com.xmg.p2p.base.util; import java.lang.annotation.ElementType; import java.lang.an ...
- Ubuntu VNC 打开spyder无法输入(检测不到键盘配置)解决方法
在ubuntu中安装好spyder后, 打开spyder发现无法输入. 在打开spyder的终端窗口,有如下提示: QXcbConnection: Failed to initialize XRand ...
- java获取当月天数,指定年月的天数,指定日期获取对应星期 .
package huolongluo.family.util; import java.text.SimpleDateFormat; import java.util.Calendar; import ...
- 2018-10-15 00:41:45 c language
2018-10-15 00:41:45 c language C语言输入法的选择 全角和半角的区别主要在于除汉字以外的其它字符,比如标点符号.英文字母.阿拉伯数字等,全角字符和半角字符所占用的位置的 ...
- window 命令行
清屏 cls 启动服务 net start 服务名(nexus.mysql) 关闭服务 net stop 服务名(nexus.mysql) 删除服务 sc delete 服务名 如果服务名有空格,加引 ...
- 的确,Java存在缺陷。但是……
[编者按]本文作者为资深码农 Tim Spann,主要讲述 Java 让人无法抗拒的众多优点以及一些些缺陷.本文系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文. 早在90年代中期,笔者 ...
- webpack-易混淆部分的解释
原文链接: https://medium.com/@rajaraodv/webpack-the-confusing-parts-58712f8fcad9 webpack的核心哲学 1. 任何皆模块 正 ...
- 关于 ExpressRoute 的虚拟网络网关
虚拟网络网关用于在 Azure 虚拟网络和本地位置之间发送网络流量. 配置 ExpressRoute 连接时,必须创建并配置虚拟网络网关和虚拟网络网关连接. 创建虚拟网络网关时,需要指定几项设置. 其 ...
- RHEL7:如何配置I / O调度程序
介绍 I / O调度程序用于优化磁盘上的读/写. RHEL 7中有三种类型的I / O调度程序(也称为I / O电梯): CFQ(C fullly F air Q ueuing)促进来自实时流程的I ...
- WinForm 应用程序禁止多个进程运行
方法一: 禁止多个进程运行 using System; using System.Collections.Generic; using System.Linq; using System.Window ...