cdoj 2015数据结构专题:D - 秋实大哥与战争
来源:互联网 发布:天猫整站j2ee源码下载 编辑:程序博客网 时间:2024/05/22 12:09
男儿何不带吴钩,收取关山五十州。
征战天下是秋实大哥一生的梦想,所以今天他又在练习一个对战游戏。
秋实大哥命令所有士兵从左到右排成了一行来抵挡敌人的攻击。
敌方每一次会攻击一个士兵,这个士兵就会阵亡,整个阵列就会从这个位置断开;同时有的时候已阵亡的士兵会受人赢气息感染而复活。
秋实大哥想知道某一时刻某一个士兵所在的阵列的长度是多少。
Input
第一行包含两个整数
接下来
0 x : 表示x位置的士兵受到攻击阵亡1 x : 表示x位置的士兵受人赢气息感染复活2 x : 秋实大哥想知道第x个士兵所在阵列的长度
Output
对于每一个
Sample input and output
5 32 20 32 2
52
#include <iostream>#include <cstdio>#include <list>using namespace std;list<int> l;void die(int x){ list<int>::iterator l1,l2; l2 = l.end(); for(l1 = l.begin();x > *l1 && l1 != l2;l1++); if(x != *l1) l.insert(l1, x);}void re(int x){ list<int>::iterator l1,l2; l2 = l.end(); for(l1 = l.begin();x != *l1 && l1 != l2;l1++); l.erase(l1);}int main(){ int n,m,x,p; scanf("%d%d",&n,&m); l.push_back(0); l.push_back(n+1); while(m --){ scanf("%d%d",&p,&x); if(p == 0) die(x); else if(p == 1) re(x); else{ list<int>::iterator l1,l2,l3; l2 = l.end(); for(l1 = l.begin();x > *l1 && l1 != l2;l1++); if(x == *l1){ printf("0\n"); continue; } l3 = l1; l3 --; printf("%d\n",*l1 - *l3 - 1); } } return 0;}
用list实现(后来发现用set好像更优)。
一共n个士兵,先将0和n+1加入链表,当有士兵死亡时,将死亡士兵的位置加入链表,并保证链表按升序排列。当某士兵复活时,从链表中删除该士兵的位置。询问士兵所在阵列长度时,从头至尾遍历链表,找出被询问士兵所在区间,通过两边死亡士兵位置或边界位置相减再减1,得到阵列长度。
需要特别注意加以判断的有两点,一是死亡的士兵还可能被攻击,但是链表中不能再加一个,这种情况在死亡士兵加入链表时加以判断,保证其不在链表中才能加入,否则不加入。另一个是死亡的士兵可能被询问,当死亡士兵被询问时,输出0,故在询问中多加条判断。
0 0
- cdoj 2015数据结构专题:D - 秋实大哥与战争
- cdoj 2015数据结构专题:B - 秋实大哥与花
- cdoj 2015数据结构专题:C - 秋实大哥与快餐店
- cdoj 2015数据结构专题:G - 秋实大哥去打工
- cdoj 2015数据结构专题:H - 秋实大哥打游戏
- cdoj 2015数据结构专题:N - 秋实大哥搞算数
- cdoj 2015数据结构专题:F - 秋实大哥与妹纸
- cdoj 2015数据结构专题:M - 秋实大哥与线段树
- CDOJ 1061 秋实大哥与战争 暴力/set
- uestc data structure D - 秋实大哥与战争
- cdoj 1061 秋实大哥与战争 线段树,合并区间,单点更新,单点查询区间长度
- [UESTC 1061]秋实大哥与战争
- CDOJ 1059 秋实大哥与小朋友(离散化)
- CDOJ 1060 秋实大哥与快餐店 字典树
- CDOJ 1057 秋实大哥与花 裸线段树
- CDOJ 1146 秋实大哥与连锁快餐店
- UESTC -- 1061 秋实大哥与战争(暴力/set)
- CDOJ 1071 秋实大哥下棋
- 数组的交集用法
- 模拟新浪微博随便看看栏目
- Linux内核分析 - 网络[四]:路由表
- 深入Java虚拟机——JVM内存详解
- 谈谈匈牙利算法
- cdoj 2015数据结构专题:D - 秋实大哥与战争
- [android] 签名
- 开源,安卓自动缩放布局,解决屏幕适配问题
- C# 链接SQLServer 图解
- 【LeetCode】Rotate list
- python实现二分查找及bisect模块的简介
- SpringMVC 基础教程 简单入门实例
- [SSH_easyUI]细节2:JSON
- Java常用数据结构的总结