CF1010D Mars rover [位元運算]

來源:互聯網
上載者:User

標籤:flag   初始   etc   ring   ios   傳送門   clu   ret   als   

  題目傳送門

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+7;int n,dp[N];struct Node { int ls,rs,val,type; }t[N];inline int read(){    char ch=getchar(); int x=0; bool flag=false;    while( ch<‘0‘ || ch>‘9‘ ) {        if( ch==‘-‘ ) flag=true; ch=getchar(); }    while( ch>=‘0‘ && ch<=‘9‘ ) {        x=x*10+ch-‘0‘; ch=getchar(); }    return flag ? -x : x;}void dfs(int x){    if( t[x].type==5 ) return;    switch (t[x].type) {        case 1:            dfs(t[x].ls), dfs(t[x].rs);            t[x].val=t[t[x].ls].val&t[t[x].rs].val;            break;        case 2:            dfs(t[x].ls), dfs(t[x].rs);            t[x].val=t[t[x].ls].val^t[t[x].rs].val;            break;        case 3:            dfs(t[x].ls), dfs(t[x].rs);            t[x].val=t[t[x].ls].val|t[t[x].rs].val;            break;        case 4:            dfs(t[x].ls); t[x].val=(t[t[x].ls].val^1);            break;    }}void DP(int x){    if( t[x].type==5 ) return;    switch (t[x].type) {        case 1:            if( t[t[x].ls].val==1 && t[t[x].rs].val==1 ) {                dp[t[x].ls]=dp[t[x].rs]=1;                DP(t[x].ls), DP(t[x].rs);            } else if( t[t[x].ls].val==1 && t[t[x].rs].val==0 ) {                dp[t[x].rs]=1; DP(t[x].rs);            } else if( t[t[x].ls].val==0 && t[t[x].rs].val==1 ) {                dp[t[x].ls]=1; DP(t[x].ls);            }            break;        case 2:            dp[t[x].ls]=dp[t[x].rs]=1;            DP(t[x].ls), DP(t[x].rs);            break;        case 3:            if( t[t[x].ls].val==1 && t[t[x].rs].val==0 ) {                dp[t[x].ls]=1, DP(t[x].ls);            } else if( t[t[x].ls].val==0 && t[t[x].rs].val==1 ) {                dp[t[x].rs]=1, DP(t[x].rs);            } else if( t[t[x].ls].val==0 && t[t[x].rs].val==0 ) {                dp[t[x].ls]=dp[t[x].rs]=1;                DP(t[x].ls), DP(t[x].rs);            }            break;        case 4:            dp[t[x].ls]=1, DP(t[x].ls);            break;    }}int main(){    n=read(); char s[10];    for(int i=1; i<=n; ++i) {        scanf("%s",s);        switch (s[0]) {            case ‘A‘: t[i].type=1, t[i].ls=read(), t[i].rs=read(); break;            case ‘X‘: t[i].type=2, t[i].ls=read(), t[i].rs=read(); break;            case ‘O‘: t[i].type=3, t[i].ls=read(), t[i].rs=read(); break;            case ‘N‘: t[i].type=4, t[i].ls=read(); break;            case ‘I‘: t[i].type=5, t[i].val=read(); break;        }    }    dfs(1); DP(1);    for(int i=1; i<=n; ++i) {        if( t[i].type!=5 ) continue;        if( dp[i] ) putchar((t[1].val^1)+‘0‘);        else putchar(t[1].val+‘0‘);    }    puts("");    return 0;}

 

CF1010D Mars rover [位元運算]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.