AtCoder Beginner Contest 261E // 按位思考 + dp
题目链接:E - Many Operations (atcoder.jp)
题意:
给定一个数x,以及n个操作(ti,ai):
当 t = 1 时,将 x & a
当 t = 2 时,将 x | a
当 t = 3 时,将 x ^ a
然后分别打印n个数:x进行前1个操作后打印,进一步地再进行前2个操作后打印,... ,进一步地再进行前n个操作后打印。
思路:
由于x、ai 均小于 230 ,每个操作又都是位运算,那么按二进制的每位去思考的话,最多有30个位,每位的初始值只能为0、1,只要先预处理出,每位为初始分别为0、1时,进行前 i 次(1~n)操作后的值,就可以很快地求出任意数进行 前 i 次操作后的值。
代码:
//dp
#include <bits/stdc++.h>
using namespace std; const int N = 200010; int n, x, t[N], a[N];
bool f[N][30][2]; //fi,j,k:对于二进制位下的第j位,初始为k的情况下,进行前i次操作后的值 int main()
{
cin >> n >> x;
for(int i = 1; i <= n; i++) scanf("%d%d", &t[i], &a[i]); for(int i = 0; i < 30; i++) f[0][i][0] = 0, f[0][i][1] = 1;
for(int i = 1; i <= n; i++)
for(int j = 0; j < 30; j++)
for(int k = 0; k < 2; k++)
if(t[i] == 1) f[i][j][k] = f[i - 1][j][k] & (a[i] >> j & 1);
else if(t[i] == 2) f[i][j][k] = f[i - 1][j][k] | (a[i] >> j & 1);
else if(t[i] == 3) f[i][j][k] = f[i - 1][j][k] ^ (a[i] >> j & 1); for(int i = 1; i <= n; i++)
{
int res = 0;
for(int j = 0; j < 30; j++) res += f[i][j][x >> j & 1] << j;
printf("%d\n", x = res);
} return 0;
}
AtCoder Beginner Contest 261E // 按位思考 + dp的更多相关文章
- AtCoder Beginner Contest 179 D - Leaping Tak  (DP)
		
题意:给你一个数字\(n\)和\(k\)个区间,\(S\)表示所有区间的并的集合,你目前在\(1\),每次可以从集合中选择一个数字向右移动,问有多少种方法从\(1\)走到\(n\). 题解:我们从1开 ...
 - atcoder beginner contest 251(D-E)
		
Tasks - Panasonic Programming Contest 2022(AtCoder Beginner Contest 251)\ D - At Most 3 (Contestant ...
 - AtCoder Beginner Contest 154 题解
		
人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...
 - AtCoder Beginner Contest 153 题解
		
目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...
 - KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解
		
KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...
 - AtCoder Beginner Contest 173 题解
		
AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...
 - AtCoder Beginner Contest 169 题解
		
AtCoder Beginner Contest 169 题解 这场比赛比较简单,证明我没有咕咕咕的时候到了! A - Multiplication 1 没什么好说的,直接读入两个数输出乘积就好了. ...
 - AtCoder Beginner Contest 238  A - F 题解
		
AtCoder Beginner Contest 238 \(A - F\) 题解 A - Exponential or Quadratic 题意 判断 \(2^n > n^2\)是否成立? S ...
 - AtCoder Beginner Contest 100 2018/06/16
		
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
 
随机推荐
- 是时候使用 YAML 来做配置或数据文件了
			
概述 我们做程序,经常需要用到配置信息,回顾一下这么多年的搬砖生涯,我记得用过多种格式的文件来定义配置信息,例如 ini文件,xml文件,或者现在比较流行的 json 文件. 这些年虽然云计算和云原生 ...
 - Golang:将日志以Json格式输出到Kafka
			
在上一篇文章中我实现了一个支持Debug.Info.Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手.有兴趣的可以通过这个链接前往:https://github.com/ ...
 - WinUI3开发笔记(Ⅰ)
			
·背景:自从接触了微软的WinUI3的界面,瞬间觉得C# .NetFramework不香了,于是入坑网上教程极少的WinUI3的开发...... 难 (一,安装开发环境) 具体参考微软官网说明http ...
 - Nginx基本配置与应用
			
一.准备 1.1 环境准备 CentOS7软件环境 1.2 tomcat多实例 把/etc/profile.d/tomcat.sh中的变量注释了 #export TOMCAT_HOME=/usr/lo ...
 - 个人冲刺(一)——体温上报app(二阶段)
			
冲刺任务:完成app登录和注册页面的布局 activity_register.xml <?xml version="1.0" encoding="utf-8&quo ...
 - 个人冲刺(一)——体温上报app(一阶段)
			
任务:完成了体温上报app的整体页面布局 activity_main.xml <?xml version="1.0" encoding="utf-8"?& ...
 - 第06组 Alpha冲刺 (1/6)
			
1.1 基本情况 队名:守护(发际)线程 组长博客:郝雷明 作业博客:郝雷明 组员人数:10 1.2 冲刺概况汇报 1. 郝雷明(组长) 过去两天完成了哪些任务 学习了微信开发平台的文档内容,熟悉微信 ...
 - 什么是Gerber文件?PCB电路板Gerber文件简介
			
什么是Gerber文件: Gerber也叫"光绘",通常只代表一种格式如RS-274, 274D, 274X等,充任了将设计的图形数据转换成PCB制造的两头媒介,即一种CAD-CA ...
 - 万字剖析Ribbon核心组件以及运行原理
			
大家好,本文我将继续来剖析SpringCloud中负载均衡组件Ribbon的源码.本来我是打算接着OpenFeign动态代理生成文章直接讲Feign是如何整合Ribbon的,但是文章写了一半发现,如果 ...
 - dubbo的消费者是怎么获取提供者服务接口引用的?
			
本文主要解读dubbo消费者是如何引用服务端接口的,是如何像本地调用一样调用远程服务的. 并试着从设计者的角度思考,为何这样设计. @Component public class DubboConsu ...