BZOJ 3668:起床困难综合症(贪心)

分析:按位贪心即可。

program sleep;
var
  a,g:array[0..150000]of longint;
  n,i,m,ans,t,len,x,y,v:longint;
  c:char; s:string; e:boolean;
function cheak(x,y:longint):longint;
var i:longint;
begin
  for i:=1 to n do
   begin
     if g[i]=1 then x:=x and (a[i] shr (y-1) and 1);
     if g[i]=2 then x:=x or (a[i]  shr (y-1) and 1);
     if g[i]=3 then x:=x xor (a[i] shr (y-1) and 1);
   end;
  exit(x);
end;
begin
   assign(input,‘sleep.in‘);
reset(input);
assign(output,‘sleep.out‘);
rewrite(output);
  readln(n,m);
  for i:=1 to n do
   begin
     readln(s); t:=pos(‘ ‘,s); c:=s[1];
     if c=‘A‘ then g[i]:=1;
     if c=‘O‘ then g[i]:=2;
     if c=‘X‘ then g[i]:=3;
     val(copy(s,t+1,length(s)-t),a[i]);
   end;
   ans:=0; e:=false;
   for i:=30 downto 1 do
    begin
      if cheak(0,i)=1 then begin x:=0; y:=1; end
       else if cheak(1,i)=1 then
        begin
          if (e=false)and(m shr (i-1)=0) then begin x:=0; y:=0; end
                else begin x:=1; y:=1; end;
        end
      else begin x:=0; y:=0; end;
      v:=v+x*(1 shl (i-1));
      ans:=ans+y*(1 shl (i-1));
      if v<m shr (i-1) then e:=true;
    end;
   writeln(ans);
   close(input); close(output);
end.

时间: 2024-12-25 02:02:59

BZOJ 3668:起床困难综合症(贪心)的相关文章

[NOI2014][BZOJ3668] 起床困难综合症|贪心|进制

3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1023  Solved: 577[Submit][Status][Discuss] Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因:在深邃的太平洋海底中,出现了一条名为 drd 的巨龙

[BZOJ3668] [Noi2014] 起床困难综合症 (贪心)

Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因:在深邃的太平洋海底中,出现了一条名为 drd 的巨龙,它掌握着睡眠之精髓,能随意延长大家的睡眠时间.正是由于 drd 的活动,起床困难综合症愈演愈烈,以惊人的速度在世界上传播.为了彻底消灭这种病,atm 决定前往海底,消灭这条恶龙. 历经千辛万苦,atm 终于来到了 drd 所在

BZOJ 3668 [Noi2014]起床困难综合症 贪心+位运算

前言:he- - 听说这是到水题,然而我考试的时候并没有做出来(自己太弱说个毛),总而言之吧,这道题告诉我: "位运算每一位互相不会干扰!!你丫这都想不到!太弱!!" 题意:链接 方法:贪心?+位运算 解析:考试的时候不知道位运算每一位不互相干扰(我真是"bi",这都想不到). 好吧然后这题就很好搞了,int找到31位,然后从后往前枚举,算每一位答案中取1或0的值,然后这个值对应这一位是1的话,只要检验答案加上这个值是不是超过m就可以了,就是这么个非常简单的贪心思路

BZOJ 3668 NOI2014 起床困难综合症 贪心

题干一堆废话.. 题目大意:给定n次操作(与,或,异或),在0~m中选择一个数,使这个数经过n次操作后得到的值最大 丰年好大水 AC如土分如铁.. 这尼玛根本就是水题好不 枚举选择数字的每一位 分三种情况讨论: 1.该位取0时经过n次操作结果取1 这自然是最理想的情况 必须选择0 2.情况1不满足 该为取1时经过n次操作结果取1 且取1后值不超过m 这样我们也选择1 3.上两种情况不满足 则该位取0一定比取1小 更不容易超过m 于是这题就水过去了 #include<cstdio> #inclu

uoj #2 【NOI2014】起床困难综合症 贪心+位运算

题目链接 给出n个数, 每个数有特定的一种操作, &|^三种, 给出一个m, 初始值属于[0,m],选定一个初始值, 使所有操作做完之后的值最大, 输出这个最大值. 1, 从最高位贪心, 如果初始这一位为0的时候, 所有操作进行完之后结果为1, 那么这一位就已经确定位0. 2, 初始为0, 如果所有操作进行完之后这一位为0, 那么就试初始为1的条件. 设当前位是第pos位, 如果之前已经有的数加上(1<<pos)小于m, 那么这一位为1就是可以的. 当初始为1的时候, 所有操作进行完之

【NOI2014】起床困难综合症 贪心

从高到低按位贪心,讨论一下初始0或1,分别暴力算出结果是什么 如果一开始0就能得1当然直接ans垒起来 如果1能得1而且当前m够用,那也垒起来,同时m减掉 否则gg 2min的代码 1 #include <bits/stdc++.h> 2 #define miaom(x,y) ((x & (1<<y))>>y) 3 using namespace std; 4 int n,m,p[200001],a[60],in[60]; 5 char opt[200001];

[BZOJ 3668&amp;UOJ #2][Noi2014]起床困难综合症(贪心)

Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因:在深邃的太平洋海底中,出现了一条名为 drd 的巨龙,它掌握着睡眠之精髓,能随意延长大家的睡眠时间.正是由于 drd 的活动,起床困难综合症愈演愈烈,以惊人的速度在世界上传播.为了彻底消灭这种病,atm 决定前往海底,消灭这条恶龙.历经千辛万苦,atm 终于来到了 drd 所在的

【BZOJ】【3668】【NOI2014】起床困难综合症

贪心 位运算的题……基本都是按位来做的?... 从高位到低位,贪心来搞就可以了…… 这都算不上是数位DP吧= = 1 /************************************************************** 2 Problem: 3668 3 User: Tunix 4 Language: C++ 5 Result: Accepted 6 Time:340 ms 7 Memory:2052 kb 8 *****************************

BZOJ 3668([Noi2014]起床困难综合症-2进制拆分)

3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 1043  Solved: 590 [Submit][Status][Discuss] Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因:在深邃的太平洋海底中,出现了一条名为 drd 的

3668. [NOI2014]起床困难综合症【贪心】

Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因:在深邃的太平洋海底中,出现了一条名为 drd 的巨龙,它掌握着睡眠之精髓,能随意延长大家的睡眠时间.正是由于 drd 的活动,起床困难综合症愈演愈烈,以惊人的速度在世界上传播.为了彻底消灭这种病,atm 决定前往海底,消灭这条恶龙.历经千辛万苦,atm 终于来到了 drd 所在的