NOI2014 Day1_T1 起床困难综合症

题目不附了。。

做法:这题真是比NOI2011的内题还要水。。不过蒟蒻我只能想到nlom的做法,据说有o(n)的做法,真是神。。

统计每个数的每一位的二进制位,然后对每一位用0或1试,如果答案都是1,则保留0(尽量小)

一次AC。

Codes:

 1 #include<set>
 2 #include<queue>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 #include<cstring>
 6 #include<iostream>
 7 #include<algorithm>
 8 using namespace std;
 9 const int N = 100100;
10 #define For(i,n) for(int i=1;i<=n;i++)
11 #define Rep(i,l,r) for(int i=l;i<=r;i++)
12 #define Down(i,r,l) for(int i=r;i>=l;i--)
13 struct ope{
14     int kind,v;
15 }A[32][N];
16 char op[5];
17 int pows[32],Yuan,n,m,val;
18
19 void doit(int kth,int v){
20     int tot = 0 , kind;
21     if(op[0]==‘A‘) kind = 1;
22     if(op[0]==‘O‘) kind = 2;
23     if(op[0]==‘X‘) kind = 3;
24     while(v){
25         A[tot][kth].kind = kind;A[tot][kth].v = v % 2;
26         v/=2;tot++;
27     }
28     Rep(i,tot,30) A[i][kth].kind = kind;
29 }
30
31 void init(){
32     scanf("%d%d",&n,&m);
33     pows[0] = 1;
34     For(i,30) pows[i] = pows[i-1] * 2;
35     For(i,n){
36         scanf("\n");
37         scanf("%s %d",&op,&val);
38         doit(i,val);
39     }
40 }
41
42 int Check(int kth,int M){
43     For(i,n){
44         if(A[kth][i].kind==1) M = M & A[kth][i].v;
45         if(A[kth][i].kind==2) M = M | A[kth][i].v;
46         if(A[kth][i].kind==3) M = M ^ A[kth][i].v;
47     }
48     return M;
49 }
50
51 void Work(){
52     int ans = 0;
53     Down(i,30,0){
54         if(Check(i,0)==1) {
55             ans+=pows[i];
56         }
57         else{
58             if(Yuan+pows[i]<=m){
59                 if(Check(i,1)==1){
60                     ans+=pows[i];
61                     Yuan+=pows[i];
62                 }
63             }
64         }
65     }
66     printf("%d\n",ans);
67 }
68
69 int main(){
70     freopen("sleep.in","r",stdin);
71     freopen("sleep.out","w",stdout);
72     init();
73     Work();
74     return 0;
75 }

NOI2014 Day1_T1 起床困难综合症,布布扣,bubuko.com

时间: 2024-08-05 02:47:36

NOI2014 Day1_T1 起床困难综合症的相关文章

UOJ #2. 【NOI2014】起床困难综合症 数位DP

第二次做NOI的题... .预处理+数位DP #2. [NOI2014]起床困难综合症 id=2" style="">统计提交情况 id=2#tab-statement" style="color:rgb(85,85,85); text-decoration:none; position:relative; display:block; padding:10px 15px; margin-right:2px; line-height:1.428571

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

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

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

3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1023  Solved: 577[Submit][Status][Discuss] Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,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 *****************************

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

这道题先求出0和-1经过处理后的答案 具体看代码吧 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int v0=0,v1=-1,ans,av,n,m,x; int main() { char ch[15]; scanf("%d %d",&n,&m); for(int i=1;i<=n;i++){ scanf("%s

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];

BZOJ3668/UOJ2 [NOI2014]起床困难综合症

本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因:在深邃的太平洋海底中,出现了一条名为

noi2014 起床困难综合症

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