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

样例输入1
5
5 2 3 1 4 1 4 3 5 2
样例输入2
3
1 2 3 1 2 3

Sample Output

样例输出1
2
样例输出2
3

知道思路这题是非常好写的

思路:

贪心,遍历每个数,如果这个数字已经出现过了,答案加上这两个数之间其它数字的个数

并将这个数字从数列中删去就行了

例如:

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(贪心+树状数组)相关推荐

  1. BZOJ 1106: [POI2007]立方体大作战tet

    Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...

  2. 1106: [POI2007]立方体大作战tet

    Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...

  3. bzoj1106[POI2007]立方体大作战tet*

    bzoj1106[POI2007]立方体大作战tet 题意: 给定玩家一个有2n个元素的栈,这些元素拥有n个不同的编号,每个编号正好有两个元素.玩家每次可以交换两个相邻的元素.如果在交换之后,两个相邻 ...

  4. [POI2007]立方体大作战tet

    Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...

  5. BZOJ.2738.矩阵乘法(整体二分 二维树状数组)

    题目链接 BZOJ 洛谷 整体二分.把求序列第K小的树状数组改成二维树状数组就行了. 初始答案区间有点大,离散化一下. 因为这题是一开始给点,之后询问,so可以先处理该区间值在l~mid的修改,再处理 ...

  6. bzoj 4372 烁烁的游戏——动态点分治+树状数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4372 和 bzoj 3070 震波 是一个套路.注意区间修改的话,树状数组不能表示 dis ...

  7. hdu 6203 ping ping ping(贪心+树状数组+dfs序)

    题目链接:hdu 6203 ping ping ping 题意: 给你一棵n+1个节点树,现在有q条路径不通,问你最少有多少个节点坏掉了. 题解: 考虑贪心,对这q条路径求一下lca,按照lca的深度 ...

  8. Bzoj 4548: 小奇的糖果(双向链表+排序+树状数组)

    以下内容来自ShallWe's Blog 题目 4548: 小奇的糖果 Description 有\(N\)个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能 ...

  9. P7408-[JOI 2021 Final]ダンジョン 3【贪心,树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/P7408 题目大意 一个有n+1n+1n+1层的地牢,从iii到i+1i+1i+1层要AiA_iAi​点能量,第ii ...

最新文章

  1. java 原生sql批量插入,Java对象集合转MySQL批量插入语句
  2. 组成原理----存储管理
  3. 智能手机的超性能语音识别技术简介
  4. unicode字符和多字节字符的相互转换接口
  5. 深交所互动平台_是否存以互动平台回复替代公告、炒作股价的情形?容大感光收深交所关注函...
  6. 关于FPGA软件quartus仿真出现cannot launch the modelsim software问题的解决
  7. python图片对比模块_使用Python的PIL模块来进行图片对比
  8. [软件工程] UML 用例图详解
  9. Fiddler+手机模拟器+java采集抖音评论数据
  10. 链路层链路发现协议(LLDP)讲解
  11. Photoshop png图片改变 透明背景之外的图片颜色
  12. 离开外包之后,花了10000小时,最后我走进字节跳动拿到了offer
  13. laravel教程入门笔记
  14. 彩色图像分解出三原色分量
  15. linux系统如何关闭触控板,在Deepin Linux 15.7系统中开启或关闭触摸板的方法
  16. [__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x7a97d4c0'报错
  17. Go语言实现原理——锁实现原理
  18. openstack(pike) dvr 中南北数据流向分析
  19. nodeJs——cmd中node不是内部或外部命令
  20. git-版本控制系统-全解

热门文章

  1. HOJ 10027 Longest Ordered Subsequence Extention
  2. TweenMax学习小计
  3. 福特汉姆大学计算机科学专业,福特汉姆大学计算机与信息科学系
  4. 用云开发搭建的微信答题小程序v1.0
  5. 如何测试服务器端口是否打开?
  6. 各种音视频编解码学习详解之 编解码学习笔记(三):Mpeg系列——Mpeg 1和Mpeg 2
  7. 手机迅雷下载的文件在哪里
  8. 企业电子采购管理系统解决方案:供应商内外协同,全程电子化采购系统管理
  9. 阿卡迪亚大学的计算机科学,阿卡迪亚大学计算机科学移动与普通计算本科申请.pdf...
  10. USACO:2.2.1 Preface Numbering 序言页码