题目传送门

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. 洛谷 P2542 [AHOI2005]航线规划 解题报告

    P2542 [AHOI2005]航线规划 题目描述 对Samuel星球的探险已经取得了非常巨大的成就,于是科学家们将目光投向了Samuel星球所在的星系--一个巨大的由千百万星球构成的Samuel星系 ...

  2. iperf测试网络带宽

    http://blog.chinaaet.com/telantan/p/30901 https://boke.wsfnk.com/archives/288.html https://www.ibm.c ...

  3. bzoj千题计划284:bzoj2882: 工艺

    http://www.lydsy.com/JudgeOnline/problem.php?id=2882 将串S复制一遍变成SS 对SS构建后缀自动机,在上面走标号最小的边len(S)步,即可得最小循 ...

  4. bzoj千题计划277:bzoj4513: [Sdoi2016]储能表

    http://www.lydsy.com/JudgeOnline/problem.php?id=4513 f[i][0/1][0/1][0/1] 从高到低第i位,是否卡n的上限,是否卡m的上限,是否卡 ...

  5. 【学习笔记】Spring AOP注解使用总结

    Spring AOP基本概念 是一种动态编译期增强性AOP的实现 与IOC进行整合,不是全面的切面框架 与动态代理相辅相成 有两种实现:基于jdk动态代理.cglib Spring AOP与Aspec ...

  6. SQLSTATE[42000]

    SQLSTATE[42000]: Syntax error or access violation: 1140 Mixing of GROUP columns (MIN(),MAX(),COUNT() ...

  7. imperva 更改agent的注册密码

    imperva agent 在注册到网关的时候显示账号密码错误 如下图 这是一个数据库审计的设备由于当初最开始实施的时候并不是我安装的,所以账号密码我也不清楚,客户留的账号密码也不确定.因此导致账号密 ...

  8. TCP/UDP区别&&心跳包机制【转】

    转自:https://www.jianshu.com/p/6d93a3c21c34 UDP:用户数据报协议:主要用在实时性要求比较高的以及对质量相对较弱的地方.但是面对现在高质量的线路不会容易丢包,除 ...

  9. arm GIC介绍之四【转】

    转自:https://blog.csdn.net/sunsissy/article/details/73882718 GIC是ARM体系中重要的组件,在认识到GIC的组成和功能之后,了解到IRQ的大致 ...

  10. mongo批量操作存在更新否则插入

    def save_data(ok_ps): ns = [] for ok in ok_ps: ok['last_use_time'] = 0 ok['protocol'] = 0 # 协议类型 0:h ...