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 ...
随机推荐
- 【POJ3250】Bad Hair Day 单调栈
题目大意:给定一个由 N 个数组成的序列,求以每个序列为基准,向右最大有多少个数字都比它小. 单调栈 单调栈中维护的是数组的下标. 单调栈在每个元素出栈时统计该出栈元素的答案贡献或对应的值. 单调栈主 ...
- 【模板】MST(Kruskal)
代码如下 #include <bits/stdc++.h> using namespace std; const int maxv=2e5+10; const int maxe=5e5+1 ...
- asp.net连接数据库超时的解决办法
错误提示:“超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. ” 经过几天辛苦写的代码,终于实现了功能丰富的查询功能,但是使用的过 ...
- 【CSS】定义元素的位置
CSS定义元素的位置html元素的position属性,有4个属性值,分别是static.relative.fixed.absolute static: 1.默认值,一般不显式设置为static 2. ...
- xen list_domains stat 解析
XenServer中可以使用list_domains命令来查看所有VM以及Dom0的运行状态以及简单的资源消耗,如下: [root@xenserver ~]# list_domains id | uu ...
- 支付宝APP支付,提示代码 ALIN10070
ALIN10070 此代码时ALI64代码拆分后的细分代码: 代表签名验证失败等相关问题: 如果近期修改过或者续签 过签约协议,也需要更新公私钥.
- html5 canvas旋转+缩放
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 加速计 & CoreMotion
CHENYILONG Blog 加速计 & CoreMotion 加速计 & CoreMotion 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微 ...
- 玩转Hook——Android权限管理功能探讨(二)
距离我上一篇研究ptrace的随笔http://www.cnblogs.com/zealotrouge/p/3544147.html已经过去半年了,最近不忙的时候抽空继续研究了下.同样,参考了Prad ...
- javascritpt创建对象
javascript添加对象示例: <script> person=new Object(); person.firstname="Bill"; person.last ...