CF1010D Mars rover [位运算,DP]
Mars Rover
格式难调,题面就不放了。
分析:
今天考试的时候考了这道题目的加强版,所以来做。
其实也并不难,我们建立好树形结构以后先把初始权值全部求出,然后就得到了根节点的初始值。因为一次只修改一个点的值,所以我们只要自上而下根据位运算的种类得出每一个节点的值修改后是否会改变根节点的值就行了。
Code:
//It is made by HolseLee on 2nd Nov 2018
//CF1010D
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int N=1e6+;
int n,dp[N];
struct Node { int ls,rs,val,type; }t[N]; inline int read()
{
char ch=getchar(); int x=; bool flag=false;
while( ch<'' || ch>'' ) {
if( ch=='-' ) flag=true; ch=getchar(); }
while( ch>='' && ch<='' ) {
x=x*+ch-''; ch=getchar(); }
return flag ? -x : x;
} void dfs(int x)
{
if( t[x].type== ) return;
switch (t[x].type) {
case :
dfs(t[x].ls), dfs(t[x].rs);
t[x].val=t[t[x].ls].val&t[t[x].rs].val;
break;
case :
dfs(t[x].ls), dfs(t[x].rs);
t[x].val=t[t[x].ls].val^t[t[x].rs].val;
break;
case :
dfs(t[x].ls), dfs(t[x].rs);
t[x].val=t[t[x].ls].val|t[t[x].rs].val;
break;
case :
dfs(t[x].ls); t[x].val=(t[t[x].ls].val^);
break;
}
} void DP(int x)
{
if( t[x].type== ) return;
switch (t[x].type) {
case :
if( t[t[x].ls].val== && t[t[x].rs].val== ) {
dp[t[x].ls]=dp[t[x].rs]=;
DP(t[x].ls), DP(t[x].rs);
} else if( t[t[x].ls].val== && t[t[x].rs].val== ) {
dp[t[x].rs]=; DP(t[x].rs);
} else if( t[t[x].ls].val== && t[t[x].rs].val== ) {
dp[t[x].ls]=; DP(t[x].ls);
}
break;
case :
dp[t[x].ls]=dp[t[x].rs]=;
DP(t[x].ls), DP(t[x].rs);
break;
case :
if( t[t[x].ls].val== && t[t[x].rs].val== ) {
dp[t[x].ls]=, DP(t[x].ls);
} else if( t[t[x].ls].val== && t[t[x].rs].val== ) {
dp[t[x].rs]=, DP(t[x].rs);
} else if( t[t[x].ls].val== && t[t[x].rs].val== ) {
dp[t[x].ls]=dp[t[x].rs]=;
DP(t[x].ls), DP(t[x].rs);
}
break;
case :
dp[t[x].ls]=, DP(t[x].ls);
break;
}
} int main()
{
n=read(); char s[];
for(int i=; i<=n; ++i) {
scanf("%s",s);
switch (s[]) {
case 'A': t[i].type=, t[i].ls=read(), t[i].rs=read(); break;
case 'X': t[i].type=, t[i].ls=read(), t[i].rs=read(); break;
case 'O': t[i].type=, t[i].ls=read(), t[i].rs=read(); break;
case 'N': t[i].type=, t[i].ls=read(); break;
case 'I': t[i].type=, t[i].val=read(); break;
}
}
dfs(); DP();
for(int i=; i<=n; ++i) {
if( t[i].type!= ) continue;
if( dp[i] ) putchar((t[].val^)+'');
else putchar(t[].val+'');
}
puts("");
return ;
}
CF1010D Mars rover [位运算,DP]的更多相关文章
- [CF1010D]Mars Over_位运算性质
Mars rover 题目链接:http://codeforces.com/problemset/problem/1010/D 数据范围:略. 题解: 因为每次只改一个,改完之后改回去,这个性质很重要 ...
- CF1010D Mars rover
CF1010D Mars rover 洛谷评测传送门 题目描述 Natasha travels around Mars in the Mars rover. But suddenly it broke ...
- 【洛谷 P4934】 礼物 (位运算+DP)
题目链接 位运算+\(DP\)=状压\(DP\)?(雾 \(a\&b>=min(a,b)\)在集合的意义上就是\(a\subseteq b\) 所以对每个数的子集向子集连一条边,然后答案 ...
- bzoj5108 [CodePlus2017]可做题 位运算dp+离散
[CodePlus2017]可做题 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 87 Solved: 63[Submit][Status][Dis ...
- 【CF908E】New Year and Entity Enumeration 位运算+DP
[CF908E]New Year and Entity Enumeration 题意:给定$M=2^m-1$,我们称一个集合S是好的,当且仅当它满足:1.$\forall a\in S,a\ \ma ...
- [BZOJ3054] Rainbow的信号(考虑位运算 + DP?)
传送门 BZOJ没数据范围... 其实数据范围是这样的.. 前20%可以直接n^3暴力枚举每个区间 前40%可以考虑每一位,因为所有数每一位都是独立的,而和的期望=期望的和,那么可以枚举每一位,再枚举 ...
- 2019 ICPC Asia Nanchang Regional C And and Pair 找规律/位运算/dp
题意: 给定一个二进制表示的n,让你找满足如下要求的数对(i,j)的个数 $0 \leqslant j \leqslant i \leqslant n$ $ i & n = i $ $ i & ...
- 51nod 1406 位运算/dp
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1406 1406 与查询 题目来源: CodeForces 基准时间限制: ...
- leetcode 201. Bitwise AND of Numbers Range(位运算,dp)
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers ...
随机推荐
- bzoj2616: SPOJ PERIODNI——笛卡尔树+DP
不连续的处理很麻烦 导致序列DP又找不到优秀的子问题 自底向上考虑? 建立小根堆笛卡尔树 每个点的意义是:高度是(自己-father)的横着的极大矩形 子问题具有递归的优秀性质 f[i][j]i为根子 ...
- exgcd模板
逆元模板P1082 #include <cstdio> #include <algorithm> int exgcd(int a, int b, int &x, int ...
- VBA:Double类型与Decimal类型
Sub DataType() For i = 0 To 100 t1 = t1 + 0.1 t2 = t2 + CDec(0.1) Debug.Print "Double=" &a ...
- 「Vue」vue生命周期
Vue的生命周期 beforeCreate---created---beforeMount---mounted---(beforeupdate---updated :数据有更新时才会执行)---bef ...
- Python内置函数之匿名(lambda)函数
Python内置函数之匿名(lambda)函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.匿名函数 #!/usr/bin/env python #_*_coding:utf ...
- WebService和Http的POST和GET请求区别和示例
web service(SOAP) Webservice的一个最基本的目的就是提供在各个不同平台的不同应用系统的协同工作能力.Web service 就是一个应用程序,它向外界暴露出一个能够通过Web ...
- bzoj千题计划270:bzoj4559: [JLoi2016]成绩比较(拉格朗日插值)
http://www.lydsy.com/JudgeOnline/problem.php?id=4559 f[i][j] 表示前i门课,有j个人没有被碾压的方案数 g[i] 表示第i门课,满足B神排名 ...
- 训练赛第二场E题 Cottage Village
题目大意:在一条X轴上,有若干个正方形,并且保证这些正方形的中心都在X轴上,然后输入n个正方形的中心的X坐标,和正方形的边长,现在要再插入一个正方形,要求是,新插入的正方形至少要有一条边与原来的正方形 ...
- 第11月第14天 opengl yuv beginners-tutorials
1. Here is some snippets of code from my project 'movie player for iOS'. 1. fragment shader varying ...
- 关于v4包的Fragment过渡动画的事件监听无响应问题解决
项目中部分功能模块采用了单Activity+多Fragment模式,当Fragment切换时,需要在过渡动画执行完后做一些操作,通常就是在自己封装的FragmentBase中重写onCreateAni ...