zoukankan      html  css  js  c++  java
  • [BZOJ3668][Noi2014]起床困难综合症

    3668: [Noi2014]起床困难综合症

    Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 2337  Solved: 1313 [Submit][Status][Discuss]

    Description

    21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳。作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争。通过研究相关文献,他找到了该病的发病原因:在深邃的太平洋海底中,出现了一条名为 drd 的巨龙,它掌握着睡眠之精髓,能随意延长大家的睡眠时间。正是由于 drd 的活动,起床困难综合症愈演愈烈,以惊人的速度在世界上传播。为了彻底消灭这种病,atm 决定前往海底,消灭这条恶龙。历经千辛万苦,atm 终于来到了 drd 所在的地方,准备与其展开艰苦卓绝的战斗。drd 有着十分特殊的技能,他的防御战线能够使用一定的运算来改变他受到的伤害。具体说来,drd 的防御战线由 n扇防御门组成。每扇防御门包括一个运算op和一个参数t,其中运算一定是OR,XOR,AND中的一种,参数则一定为非负整数。如果还未通过防御门时攻击力为x,则其通过这扇防御门后攻击力将变为x op t。最终drd 受到的伤害为对方初始攻击力x依次经过所有n扇防御门后转变得到的攻击力。由于atm水平有限,他的初始攻击力只能为0到m之间的一个整数(即他的初始攻击力只能在0,1,...,m中任选,但在通过防御门之后的攻击力不受 m的限制)。为了节省体力,他希望通过选择合适的初始攻击力使得他的攻击能让 drd 受到最大的伤害,请你帮他计算一下,他的一次攻击最多能使 drd 受到多少伤害。

    Input

    第1行包含2个整数,依次为n,m,表示drd有n扇防御门,atm的初始攻击力为0到m之间的整数。接下来n行,依次表示每一扇防御门。每行包括一个字符串op和一个非负整数t,两者由一个空格隔开,且op在前,t在后,op表示该防御门所对应的操作, t表示对应的参数。n<=10^5

    Output

    Sample Input

    3 10
    AND 5
    OR 6
    XOR 7

    Sample Output

    1
    从高到低每位考虑
    如果这一位是$0$且最后变为了$1$,那么这一位一定选$0$
    若是$1$的话则能选就选,因为这一位的贡献一定比剩下的大
    #include <cstdio>
    int n, m;
    int op[100000 + 10], t[100000 + 10];
    void opt(int &x, int y, int p){
        if(p == 0) x &= y;
        if(p == 1) x |= y;
        if(p == 2) x ^= y;
    }
    int work(int x){
        for(int i = 1; i <= n; i++) opt(x, t[i], op[i]);
        return x;
    }
    int main(){
        scanf("%d %d", &n, &m);
        char s[5];
        for(int i = 1; i <= n; i++){
            scanf("%s%d", s, t + i);
            if(s[0] == 'A') op[i] = 0;
            if(s[0] == 'O') op[i] = 1;
            if(s[0] == 'X') op[i] = 2;
        }
        int now, ans = 0;
        for(now = 1; now <= m; now <<= 1);
        for(now >>= 1; now ; now >>= 1){
            if(work(0) & now) continue;
            else if(ans + now <= m && (work(now) & now)) ans += now;
        }
        printf("%d
    ", work(ans));
        return 0;
    }
  • 相关阅读:
    JS站点
    1011 World Cup Betting (20分)
    1007 Maximum Subsequence Sum (25分)(动态规划DP)
    1006 Sign In and Sign Out (25分)
    1005 Spell It Right (20分)
    1004 Counting Leaves (30分)(DFS)
    1003 Emergency (25分)(Dijkstra算法)
    1002 A+B for Polynomials (25分)
    1001 A+B Format (20分)
    canvas
  • 原文地址:https://www.cnblogs.com/ruoruoruo/p/7647832.html
Copyright © 2011-2022 走看看