博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1106[POI2007]立方体大作战tet*
阅读量:6451 次
发布时间:2019-06-23

本文共 974 字,大约阅读时间需要 3 分钟。

题意:

给定玩家一个有2n个元素的栈,这些元素拥有n个不同的编号,每个编号正好有两个元素。玩家每次可以交换两个相邻的元素。如果在交换之后,两个相邻的元素编号相同,则将他们都从栈中移除,所有在他们上面的元素都会掉落下来并且可以导致连锁反应。求最少的步数将方块全部消除。

题解:

用一个栈维护,如果遇到一个没有遇到过的编号就入栈,否则就让之前的那个元素出栈,两个元素之间的元素向下移一位,并将两个元素的距离计入答案。

代码:

1 #include 
2 #include
3 #include
4 #define inc(i,j,k) for(int i=j;i<=k;i++) 5 #define maxn 100010 6 using namespace std; 7 8 inline int read(){ 9 char ch=getchar(); int f=1,x=0;10 while(ch<'0'||ch>'9'){
if(ch=='-')f=-1; ch=getchar();}11 while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();12 return f*x;13 }14 int st[maxn],top,ans,n; bool in[maxn];15 int main(){16 n=read();17 inc(i,1,2*n){18 int x=read();19 if(!in[x])in[x]=1,st[++top]=x;else{20 int j=top; while(st[j]!=x)j--; inc(k,j,top-1)st[k]=st[k+1],ans++; top--; in[x]=0;21 }22 }23 printf("%d",ans); return 0;24 }

 

20160810

转载于:https://www.cnblogs.com/YuanZiming/p/5769470.html

你可能感兴趣的文章
bzoj1106[POI2007]立方体大作战tet*
查看>>
spring boot configuration annotation processor not found in classpath问题解决
查看>>
【转】正则基础之——神奇的转义
查看>>
团队项目测试报告与用户反馈
查看>>
MyBatis(1)——快速入门
查看>>
对软件工程课程的期望
查看>>
CPU高问题排查
查看>>
Mysql中文字符串提取datetime
查看>>
CentOS访问Windows共享文件夹的方法
查看>>
IOS 与ANDROID框架及应用开发模式对比一
查看>>
由中序遍历和后序遍历求前序遍历
查看>>
JQUERY Uploadify 3.1 C#使用案例
查看>>
coursera 北京大学 程序设计与算法 专项课程 完美覆盖
查看>>
firewall 端口转发
查看>>
wndows make images
查看>>
FS系统开发设计(思维导图)
查看>>
我学习参考的网址
查看>>
DEDE自带的采集功能,标题太短的解决方法
查看>>
easyui的combotree以及tree,c#后台异步加载的详细介绍
查看>>
1、串(字符串)以及串的模式匹配算法
查看>>