bzoj 1106: [POI2007]立方体大作战tet(贪心+树状数组)
1106: [POI2007]立方体大作战tet
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 785 Solved: 574
[Submit][Status][Discuss]
Description
一个叫做立方体大作战的游戏风靡整个Byteotia。这个游戏的规则是相当复杂的,所以我们只介绍他的简单规则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置。这些元素拥有n个不同的编号,每个编号正好有两个元素。玩家每次可以交换两个相邻的元素。如果在交换之后,两个相邻的元素编号相同,则将他们都从栈中移除,所有在他们上面的元素都会掉落下来并且可以导致连锁反应。玩家的目标是用最少的步数将方块全部消除。
Input
第一行包含一个正整数n(1<=n<=50000)。接下来2n行每行一个数ai,从上到下描述整个栈,保证每个数出现且仅只出现两次(1<=ai<=n)。初始时,没有两个相同元素相邻。并且保证所有数据都能在1000000步以内出解。
Output
第一行包含一个数m,表示最少的步数。
Sample Input
Sample Output
知道思路这题是非常好写的
思路:
贪心,遍历每个数,如果这个数字已经出现过了,答案加上这两个数之间其它数字的个数
并将这个数字从数列中删去就行了
例如:
1 2 3 2 3 1
当遍历到第4个数'2'时,中间有个3,ans++
当遍历到第5个数'3'时,中间没有数字(有个2但已经被删了)
当遍历到第6个数'1'时,中间也没有数字(2和3都被删了)
所以最后答案是1
上面的步骤同时也是证明:删除任意一对数时,一定要保证中间已经没有相同的数字了才是最优解
过程可以用树状数组维护
#include<stdio.h>
#define LL long long
int n, flag[50005], tre[100005];
void Update(int k, int x)
{while(k<=n*2){tre[k] += x;k += k&-k;}
}
int Query(int k)
{int ans = 0;while(k){ans += tre[k];k -= k&-k;}return ans;
}
int main(void)
{LL ans;int i, x;scanf("%d", &n);ans = 0;for(i=1;i<=2*n;i++){scanf("%d", &x);if(flag[x]==0){Update(i, 1);flag[x] = i;}else{ans += Query(i)-Query(flag[x]);Update(flag[x], -1);}}printf("%lld\n", ans);return 0;
}
/*
3
1 2 3 2 3 1
*/
bzoj 1106: [POI2007]立方体大作战tet(贪心+树状数组)相关推荐
- BZOJ 1106: [POI2007]立方体大作战tet
Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...
- 1106: [POI2007]立方体大作战tet
Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...
- bzoj1106[POI2007]立方体大作战tet*
bzoj1106[POI2007]立方体大作战tet 题意: 给定玩家一个有2n个元素的栈,这些元素拥有n个不同的编号,每个编号正好有两个元素.玩家每次可以交换两个相邻的元素.如果在交换之后,两个相邻 ...
- [POI2007]立方体大作战tet
Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...
- BZOJ.2738.矩阵乘法(整体二分 二维树状数组)
题目链接 BZOJ 洛谷 整体二分.把求序列第K小的树状数组改成二维树状数组就行了. 初始答案区间有点大,离散化一下. 因为这题是一开始给点,之后询问,so可以先处理该区间值在l~mid的修改,再处理 ...
- bzoj 4372 烁烁的游戏——动态点分治+树状数组
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4372 和 bzoj 3070 震波 是一个套路.注意区间修改的话,树状数组不能表示 dis ...
- hdu 6203 ping ping ping(贪心+树状数组+dfs序)
题目链接:hdu 6203 ping ping ping 题意: 给你一棵n+1个节点树,现在有q条路径不通,问你最少有多少个节点坏掉了. 题解: 考虑贪心,对这q条路径求一下lca,按照lca的深度 ...
- Bzoj 4548: 小奇的糖果(双向链表+排序+树状数组)
以下内容来自ShallWe's Blog 题目 4548: 小奇的糖果 Description 有\(N\)个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能 ...
- P7408-[JOI 2021 Final]ダンジョン 3【贪心,树状数组】
正题 题目链接:https://www.luogu.com.cn/problem/P7408 题目大意 一个有n+1n+1n+1层的地牢,从iii到i+1i+1i+1层要AiA_iAi点能量,第ii ...
最新文章
- java 原生sql批量插入,Java对象集合转MySQL批量插入语句
- 组成原理----存储管理
- 智能手机的超性能语音识别技术简介
- unicode字符和多字节字符的相互转换接口
- 深交所互动平台_是否存以互动平台回复替代公告、炒作股价的情形?容大感光收深交所关注函...
- 关于FPGA软件quartus仿真出现cannot launch the modelsim software问题的解决
- python图片对比模块_使用Python的PIL模块来进行图片对比
- [软件工程] UML 用例图详解
- Fiddler+手机模拟器+java采集抖音评论数据
- 链路层链路发现协议(LLDP)讲解
- Photoshop png图片改变 透明背景之外的图片颜色
- 离开外包之后,花了10000小时,最后我走进字节跳动拿到了offer
- laravel教程入门笔记
- 彩色图像分解出三原色分量
- linux系统如何关闭触控板,在Deepin Linux 15.7系统中开启或关闭触摸板的方法
- [__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x7a97d4c0'报错
- Go语言实现原理——锁实现原理
- openstack(pike) dvr 中南北数据流向分析
- nodeJs——cmd中node不是内部或外部命令
- git-版本控制系统-全解
热门文章
- HOJ 10027 Longest Ordered Subsequence Extention
- TweenMax学习小计
- 福特汉姆大学计算机科学专业,福特汉姆大学计算机与信息科学系
- 用云开发搭建的微信答题小程序v1.0
- 如何测试服务器端口是否打开?
- 各种音视频编解码学习详解之 编解码学习笔记(三):Mpeg系列——Mpeg 1和Mpeg 2
- 手机迅雷下载的文件在哪里
- 企业电子采购管理系统解决方案:供应商内外协同,全程电子化采购系统管理
- 阿卡迪亚大学的计算机科学,阿卡迪亚大学计算机科学移动与普通计算本科申请.pdf...
- USACO:2.2.1 Preface Numbering 序言页码