hud 5929.Basic Data Structure
http://acm.hdu.edu.cn/showproblem.php?pid=5929
题意:一个只有0和1的双端队列,可以入栈,出栈,反转,求值(从现在的栈顶一直与非到栈底)
可能有20w次的操作,emmm菜逼挠了挠头感觉肯定有什么规律。奈何太菜没有发现,硬算一波果然超时.....只能去网上找大佬的代码看...
只需要记录两端最靠边的0的位置就好了,也就是两端连续的1的个数,因为从栈顶到最接近栈底的0之间的不管是什么,只要有东西(0不在栈顶),和那个0与非最后与非那个0得到的都是1,再根据这个0后面有几个连续的1就可以知道最后结果了
但是会有几种情况:
- 没有0(都是1或者空的)(入栈的时候如果入1)
- 只有一个0(两端最靠边的0是同一个)
- 两个0(各是各的)
- 只有一个0而且在某端点
每种情况入栈的时候会不同,具体看注释吧。出栈的时候维护好记录0位置(连续1的个数)的标志就好了
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int T,I=1; 6 scanf("%d",&T); 7 while(T--) 8 { 9 printf("Case #%d:\n",I++); 10 int Y; 11 bool fa = 1,ze = 0;//fa是栈是否反转的标志,ze是栈中是否有0的标志 12 int t=0,w=0;//w表示栈为正(fa==1)的时候的栈底有几个连续的1,t表示栈为反(fa==0)时栈底有几个连续的1 13 deque<bool> de;//双端队列,啊真好用2333 14 scanf("%d",&Y); 15 char str[20];//存指令 16 while(Y--) 17 { 18 getchar(); 19 scanf("%[^\n]",str);//读一整行到str中 20 switch(str[2])//通过指令的第三个字符判断 21 { 22 case 'S'://入栈 23 if(fa)//没反转 24 { 25 de.push_front(str[5]=='1');//将数字入栈 26 if(str[5]=='1')//如果入的是1的话t++ 27 t++; 28 else 29 t=0,ze=1;//如果入的是0,把t置零,ze置1 30 if(!ze)w++;//如果入这个数字的时候栈里没有0(入的这个肯定是1),w也要++,因为如果栈里没有0那w和t就是长度 31 } 32 else//反转 33 { 34 de.push_back(str[5]=='1'); 35 if(str[5]=='1') 36 w++; 37 else 38 w=0,ze=1; 39 if(!ze)t++; 40 } 41 break; 42 case 'E'://求值 43 if(!de.size())//栈空的话 44 printf("Invalid.\n"); 45 else//非空的话 46 { 47 //偶数为0,奇数为1,0的时候也为1,w=0;w=size();w在中间 48 int tem = fa==1?w:t; 49 if(tem==0)//如果栈底没有连续1 50 if(de.size()!=1)printf("1\n");//如果不是只有一个0的话结果肯定是1 51 else 52 printf("0\n");//如果栈里只有一个0的话结果就是0 53 else if(tem==de.size()||tem==de.size()-1)//如果栈里没有0或者0在栈顶的话 54 printf("%d\n",tem%2); 55 else//如果0在中间(上面说的第三种情况)可以吧0看做1 56 printf("%d\n",(tem+1)%2); 57 } 58 break; 59 case 'V'://反转 60 fa=!fa; 61 break; 62 case 'P'://出栈 63 if(fa) 64 { 65 de.pop_front(); 66 t--; 67 if(t<0)//没有刚刚出掉了个0要重新找离栈底最近的0(相当于求连续1的个数) 68 for(t=0; t<de.size()&&de[t]!=false; t++); 69 if(t==de.size())//没找到,说明栈里没有0 70 ze=0; 71 } 72 else 73 { 74 de.pop_back(); 75 w--; 76 int i=0; 77 if(w<0)//没有刚刚出掉了个0要重新找离栈底最近的0(相当于求连续1的个数) 78 for(w=de.size(); w>0&&de[w-1]!=false; w--,i++); 79 if(w==0)//没找到,说明栈里没有0 80 ze=0,w=i; 81 } 82 break; 83 } 84 } 85 } 86 return 0; 87 }
转载于:https://www.cnblogs.com/icfir/p/9022563.html
hud 5929.Basic Data Structure相关推荐
- 【推导】【线段树】hdu5929 Basic Data Structure
题意: 维护一个栈,支持以下操作: 从当前栈顶加入一个0或者1: 从当前栈顶弹掉一个数: 将栈顶指针和栈底指针交换: 询问a[top] nand a[top-1] nand ... nand a[bo ...
- TRIE - Data Structure
Introduction 介绍 Trie,又称单词查找树,是一种树形结构,用于保存大量的字符串.它的优点是:利用字符串的公共前缀来节约存储空间. Trie is an ordered tree dat ...
- 【HDU - 4217 】Data Structure? (线段树求第k小数)
题干: Data structure is one of the basic skills for Computer Science students, which is a particular w ...
- Data Structure
Data Structure 1. Abstract Data Type (ADT) 1.1. Data type A set of objects + a set of operations Exa ...
- SAP RETAIL初阶MM41创建商品主数据BASIC DATA里的Valuation Class
SAP RETAIL初阶MM41创建商品主数据BASIC DATA里的Valuation Class 执行事务代码MM41,创建一个Single Material的物料. 物料类型 FOOD 物料组: ...
- SAP RETAIL商品主数据Basic Data视图里几个让人莫名惊诧的字段
SAP RETAIL商品主数据Basic Data视图里几个让人莫名惊诧的字段 刚刚接触SAP零售系统,笔者对于商品主数据的界面,很多不适应,不熟悉. 所以笔者在闲暇之余,没事就喜欢在SAP零售系统上 ...
- SAP LSMW 物料主数据Basic Data Text数据的导入
SAP LSMW 物料主数据Basic Data Text数据的导入 笔者所在的D项目上,业务要求每个物料主数据能有一个remark字段,用以在物料描述之外为物料做更多更详细的描述,比如一些备品备件物 ...
- LeetCode Two Sum III - Data structure design
原题链接在这里:https://leetcode.com/problems/two-sum-iii-data-structure-design/ 题目: Design and implement a ...
- leetcode 211. Add and Search Word - Data structure design Trie树
题目链接 写一个数据结构, 支持两种操作. 加入一个字符串, 查找一个字符串是否存在.查找的时候, '.'可以代表任意一个字符. 显然是Trie树, 添加就是正常的添加, 查找的时候只要dfs查找就可 ...
最新文章
- 1048 数字加密 (20 分)java
- c#_未将对象引用设置到对象的实例
- 不管工作压力太大了,还是工作压力太小了;都容易引起开发人员的辞职风波...
- 连接数_全国建成5G基站超48万个 5G终端连接数已过亿
- Redis 实践笔记1---基础知识
- python代码性能分析_使用memory_profiler对代码进行性能分析会增加执行时间
- 基于智能手机Android平台音乐播放器全程开发实战
- 创建数据库python: can‘t open file ‘manage.py‘: [Errno 2] No such file or directory报错
- Apache Solr Velocity 注入远程命令执行漏洞复现 (CVE-2019-17558)
- Telnet 1433端口
- 6-4cifar10数据介绍读取处理(下)
- bzoj5017 [Snoi2017]炸弹
- 查看详细_教师资格准考证开始打印!点击查看详细流程!
- cad立面索引符号 规范_cad立面索引符号怎么画
- VMware安装windows7x64时提示找不到CD/DVD驱动器
- YNOI板刷计划记录
- 做自媒体,学视频剪辑须知的四大宝藏网站
- Flex布局脑图总结
- ios面试题 看了就知道哪方面需要加强上机练习
- kali安装中文输入法(搜狗输入法)
热门文章
- angularJS学习笔记一
- 项目管理知识框架PMBOK(文字版)
- 好久没写blog了。最近感觉自己老了
- java中file类_Java中file类
- nginx启动只有master没有worker_深入浅出Nginx
- python编程入门单例_常见的在Python中实现单例模式的三种方法
- php 获取对象中的元素个数组长度,php数组长度怎么获取
- 位宽512bit显卡_显卡知识:关于显卡位宽的基础知识科普
- C#中统计程序运行时间
- python batch normalization_Batch Normalization 引出的一系列问题