• NOI2014 起床困难综合症 day1t1


    感觉NOI题在向简单方向发展,或者说明年会难到暴呢?

    直接模拟啊,枚举每个二进制数位,看经过变换之后是否为1及为1的条件即可。( O(nlogm))。

    然后。。。跪了一个点,第五个死活比标准大一。。。

    补码表示真dt,我会告诉你 1 >> 32 = 1吗(你肯定知道)?是我太傻逼了。 

      1 //{HEADS
      2 #define FILE_IN_OUT
      3 #include <cstdio>
      4 #include <cstring>
      5 #include <cstdlib>
      6 #include <cmath>
      7 #include <ctime>
      8 #include <algorithm>
      9 #include <iostream>
     10 #include <fstream>
     11 #include <vector>
     12 #include <stack>
     13 #include <queue>
     14 #include <deque>
     15 #include <map>
     16 #include <set>
     17 #include <bitset>
     18 #include <complex>
     19 #include <string>
     20 #define REP(i, j) for (int i = 1; i <= j; ++i)
     21 #define REPI(i, j, k) for (int i = j; i <= k; ++i)
     22 #define REPD(i, j) for (int i = j; 0 < i; --i)
     23 #define STLR(i, con) for (int i = 0, sz = con.size(); i < sz; ++i)
     24 #define STLRD(i, con) for (int i = con.size() - 1; 0 <= i; --i)
     25 #define CLR(s) memset(s, 0, sizeof s)
     26 #define SET(s, v) memset(s, v, sizeof s)
     27 #define mp make_pair
     28 #define pb push_back
     29 #define PL(k, n) for (int i = 1; i <= n; ++i) { cout << k[i] << ' '; } cout << endl
     30 #define PS(k) STLR(i, k) { cout << k[i] << ' '; } cout << endl
     31 using namespace std;
     32 typedef long long LL;
     33 typedef double DB;
     34 typedef pair<int, int> i_pair;
     35 const int INF = 0x3f3f3f3f;
     36 //}
     37 
     38 const int maxn = 1e5 + 100;
     39 int ope[maxn], n, m;
     40 bitset<33> t[maxn];
     41 char op[10];
     42 
     43 int me[40][2];
     44 
     45 int main() {
     46     freopen("sleep.in", "r", stdin);
     47     freopen("sleep.out", "w", stdout);
     48 
     49     scanf("%d%d", &n, &m);
     50     for(int i = 1; i <= n; ++i) {
     51         int tmp;
     52         scanf("%s %d", op, &tmp);
     53         t[i] = tmp;
     54     //    printf("%s
    ", t[i].to_string().c_str());
     55         if(strcmp(op, "OR") == 0) {
     56             ope[i] = 0;
     57         } else if(strcmp(op, "AND") == 0) {
     58             ope[i] = 1;
     59         } else {
     60             ope[i] = 2;
     61         }
     62     }
     63     for(int i = 0; i <= 32; ++i) {
     64         int init = 1;
     65         for(int j = 1; j <= n; ++j) {
     66             if(init == 1) {
     67                 if(ope[j] == 0) {
     68                     init = 1;
     69                 } else if(ope[j] == 1) {
     70                     if(t[j][i] == 0) {
     71                         init = 0;
     72                     } else if(t[j][i] == 1) {
     73                         init = 1;
     74                     }
     75                 } else {
     76                     if(t[j][i] == 0) {
     77                         init = 1;
     78                     } else if(t[j][i] == 1) {
     79                         init = 0;
     80                     }
     81                 }
     82             } else if(init == 0) {
     83                 if(ope[j] == 0) {
     84                     if(t[j][i] == 1) {
     85                         init = 1;
     86                     }
     87                 } else if(ope[j] == 1) {
     88                     if(t[j][i] == 0) {
     89                         init = 0;
     90                     } else if(t[j][i] == 1) {
     91                         init = 0;
     92                     }
     93                 } else {
     94                     if(t[j][i] == 0) {
     95                         init = 0;
     96                     } else if(t[j][i] == 1) {
     97                         init = 1;
     98                     }
     99                 }
    100             }
    101         }
    102         me[i][1] = init;
    103         init = 0;
    104         for(int j = 1; j <= n; ++j) {
    105             if(init == 1) {
    106                 if(ope[j] == 0) {
    107                     init = 1;
    108                 } else if(ope[j] == 1) {
    109                     if(t[j][i] == 0) {
    110                         init = 0;
    111                     } else if(t[j][i] == 1) {
    112                         init = 1;
    113                     }
    114                 } else {
    115                     if(t[j][i] == 0) {
    116                         init = 1;
    117                     } else if(t[j][i] == 1) {
    118                         init = 0;
    119                     }
    120                 }
    121             } else if(init == 0) {
    122                 if(ope[j] == 0) {
    123                     if(t[j][i] == 1) {
    124                         init = 1;
    125                     }
    126                 } else if(ope[j] == 1) {
    127                     if(t[j][i] == 0) {
    128                         init = 0;
    129                     } else if(t[j][i] == 1) {
    130                         init = 0;
    131                     }
    132                 } else {
    133                     if(t[j][i] == 0) {
    134                         init = 0;
    135                     } else if(t[j][i] == 1) {
    136                         init = 1;
    137                     }
    138                 }
    139             }
    140         }
    141         me[i][0] = init;
    142     }
    143     int ans = 0;
    144     int bit = 31;
    145     /* 卧槽!!吧bit改成32就wa了一个点
    146      * 出题人真良心没卡我
    147      * 不然就10分了QAQ
    148      * */
    149     bool free_flag = false;
    150     for(int i = bit; 0 <= i; --i) {
    151         if(free_flag) {
    152             if(me[i][0] == 1 || me[i][1] == 1) {
    153                 ans += (1 << i);
    154             }
    155             continue;
    156         }
    157         if(me[i][0] == 1) {
    158             ans += (1 << i);
    159             if((m >> i) & 1) {
    160                 free_flag = true;
    161             }
    162         } else if(me[i][1] == 1) {
    163             if((m >> i) & 1) {
    164                 ans += (1 << i);
    165             }
    166         } else if((m >> i) & 1) {
    167             free_flag = true;
    168         }
    169     }
    170     printf("%d
    ", ans);
    171     fclose(stdin);
    172     fclose(stdout);
    173     return 0;
    174 }
    巨丑无比的代码
  • 相关阅读:
    BIND_MISMATCH导致过多VERSION COUNT的问题
    Using dbms_shared_pool.purge to remove a single task from the library cache
    SQL Server 2012 新的分页函数 OFFSET & FETCH NEXT
    How to delete expired archive log files using rman?
    Oracle利用external table 查看trace文件
    全栈开发经验
    ASP.NET Core教程:使用Supervisor做ASP.NET Core应用程序守护进程
    ASP.NET Core教程:ASP.NET Core程序部署到Linux
    ASP.NET Core教程:ASP.NET Core 程序部署到Windows系统
    C#:窗体传值
  • 原文地址:https://www.cnblogs.com/hzf-sbit/p/3876188.html
Copyright © 2020-2023  润新知