题目传送门

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]的更多相关文章

  1. [CF1010D]Mars Over_位运算性质

    Mars rover 题目链接:http://codeforces.com/problemset/problem/1010/D 数据范围:略. 题解: 因为每次只改一个,改完之后改回去,这个性质很重要 ...

  2. CF1010D Mars rover

    CF1010D Mars rover 洛谷评测传送门 题目描述 Natasha travels around Mars in the Mars rover. But suddenly it broke ...

  3. 【洛谷 P4934】 礼物 (位运算+DP)

    题目链接 位运算+\(DP\)=状压\(DP\)?(雾 \(a\&b>=min(a,b)\)在集合的意义上就是\(a\subseteq b\) 所以对每个数的子集向子集连一条边,然后答案 ...

  4. bzoj5108 [CodePlus2017]可做题 位运算dp+离散

    [CodePlus2017]可做题 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 87  Solved: 63[Submit][Status][Dis ...

  5. 【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 ...

  6. [BZOJ3054] Rainbow的信号(考虑位运算 + DP?)

    传送门 BZOJ没数据范围... 其实数据范围是这样的.. 前20%可以直接n^3暴力枚举每个区间 前40%可以考虑每一位,因为所有数每一位都是独立的,而和的期望=期望的和,那么可以枚举每一位,再枚举 ...

  7. 2019 ICPC Asia Nanchang Regional C And and Pair 找规律/位运算/dp

    题意: 给定一个二进制表示的n,让你找满足如下要求的数对(i,j)的个数 $0 \leqslant j \leqslant i \leqslant n$ $ i & n = i $ $ i & ...

  8. 51nod 1406 位运算/dp

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1406 1406 与查询 题目来源: CodeForces 基准时间限制: ...

  9. 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 ...

随机推荐

  1. Oracle表字段类型更改的一个经验

    先前表中ID字段类型是用序列,由于安全问题,需要处理水平权限的漏洞,虽然使用加密也可以处理,为了更方便,需要将字段类型改为Guid,如果表中已经有数据,更改起来不是很方便,对于基础数据表,这里提供一个 ...

  2. Openstack运维指南文档整理

    非常全面的运维指南整理http://zjzone.cc/index.php/2017/07/31/openstack-yun-wei-wen-dang-zheng-li/

  3. Python 发射导弹的正确方式

    ——此文以纪念南京大屠杀79周年 今天Toby教你如何用python的basemap包绘制轰炸东京的地图. 在数据可视化过程中,我们常常需要将数据根据其采集的地理位置在地图上显示出来.比如说我们会想要 ...

  4. Hadoop生态圈-Kafka的完全分布式部署

    Hadoop生态圈-Kafka的完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要内容就是搭建Kafka完全分布式,它是在kafka本地模式(https:/ ...

  5. HDU 1730 类NIM模型

    两者间的间距就是可取石子数,因为对于行内黑白相连的局面该子游戏已经结束了因为此时不管先手再怎么移都是必败,SG=0的终止态 /** @Date : 2017-10-14 21:46:21 * @Fil ...

  6. Java SSM框架之MyBatis3(二)MyBatis之Mapper代理的开发方式

    Mapper代理的开发规范 1. mapper接口的全限定名要和mapper映射文件的namespace值一致. 2. mapper接口的方法名称要和mapper映射文件的statement的id一致 ...

  7. iOS 提交应用过程出现的错误及#解决方案#images can't contain alpha channels or transparencies

        本文永久地址为http://www.cnblogs.com/ChenYilong/p/3977542.html ,转载请注明出处.    当你试图通过<预览>"导出&qu ...

  8. 基于Window10搭建android开发环境

    一.安装JDK 1.下载(网页链接) 2.双击安装文件进行安装,安装在合适目录,例如:D:\Java\jdk1.8.0_201与D:\Java\jre1.8.0_201 3.设置环境变量 3.1.JA ...

  9. Java反射--基于ParameterizedType实现泛型类,参数化类型

    一.引子: 项目中使用Gson的反序列化将json转化成具体的对象,具体方法是: package com.google.gson;下的反序列化方法 public <T> T fromJso ...

  10. VS 2013 中如何自定义快捷键(图解)

    随着软件的升级其功能也越来越多,所以相应的快捷键也多了起来.VS2013中的快捷方式已经发展为了两个快捷键的组合.例如VS2013中默认的多行注释的快捷功能键为(ctrl+k,ctrl+u).像这样类 ...