繁华模拟赛 Vicent与游戏




#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<cstdlib>
#include<string>
#include<bitset>
#include<iomanip>
#include<deque>
#include<utility>
#define INF 1000000000
#define fi first
#define se second
#define N 2000005
#define P 1000000007
#define debug(x) cerr<<#x<<"="<<x<<endl
#define MP(x,y) make_pair(x,y)
using namespace std;
typedef long long LL;
typedef pair<int,int> pii;
char _ch;
inline void getint(int &_x)
{
_x=;
for(_ch=getchar();_ch>''||_ch<'';_ch=getchar());
for(;_ch<=''&&_ch>='';_ch=getchar())
_x=_x*+_ch-;
} int stk1[N],top1,stk2[N],top2,ans,n;
//stk1是当前的单调栈,stk2存将要放到stk1中的元素
//stk1里是单调不升的,stk2也是单调不升的
int a; void Clear()//时间复杂度还能保持O(n)
{
int i,now,val;
while(top1)
{
val=stk1[top1];
for(i=top1;i;i--)
if(stk1[top1]!=stk1[i-])
break;
now=top1-i+;
top1=i-;
while(now/)//两两合并成一个更大的
{
stk1[++top1]=val+;
now-=;
}
//for(int j=1;j<=top1;j++)
//debug(stk1[j]);
//cout<<endl;
//ans=max(ans,stk1[1]);
}
ans=max(ans,stk1[]);
} int main()
{
int i,j,now,val;
freopen("vincent.in","r",stdin);
freopen("vincent.out","w",stdout);
cin>>n;
for(i=;i<=n;i++)
{
getint(a);
stk2[++top2]=a;
while(top2)//总共分5种情况
{
if(!top1)//假如第一个栈为空
{
//if(top2>1)
//top2--;
//else
stk1[++top1]=stk2[top2--];
}
else
{
if(stk1[top1]>stk2[top2])//假如第一个栈顶大于第二个栈顶
//if(top2>1)//假如第二个栈
//while(--top1);//清空
//else
stk1[++top1]=stk2[top2--];
else if(stk1[top1]==stk2[top2])//假如第一个栈顶等于第二个栈顶
/*
if(top2>1)//将两个元素合并成一个大的
{
top2--;
stk1[top1]++;
}
else*/
{
stk1[++top1]=stk2[top2--];//相等就先放进去 }
else if(stk1[top1]<stk2[top2])
{
if(top1>&&stk1[top1]==stk1[top1-])//贪心合并栈1顶的两个元素,并放入栈2
{
stk2[++top2]=stk1[top1]+;
top1-=;
}
else
{
top1--;
for(j=;j<=top2;j++)//清空之前将部分栈2内的元素放到栈1内
stk1[++top1]=stk2[j];
Clear();//只能清空掉了
}
}
}
//for(int j=1;j<=top1;j++)
//debug(stk1[j]); //for(int j=1;j<=top2;j++)
//debug(stk2[j]);
//cout<<endl; }
//for(int j=1;j<=top1;j++)
//debug(stk1[j]);
ans=max(ans,stk1[top1]);
}
//for(i=1;i<=top1;i++)
//debug(stk1[i]);
//cout<<endl;
//debug(top1);
Clear();
cout<<ans<<endl;
return ;
}
// davidlee1999WTK 2016/
// srO myk Orz
// ios::sync_with_stdio(false);
//#pragma comment(linker, "/STACK:102400000,102400000") compiler c++,not g++
/*
16
4 4 4 3 3 3 1 1 2
*/
繁华模拟赛 Vicent与游戏的更多相关文章
- 繁华模拟赛 Vicent坐电梯
/*n<=5000这样就不能用O(n)的转移了,而是要用O(1)的转移.注意我们每次的转移都来自一个连续的区间,而且我们是求和区间求和?前缀和!令sum[step][i]表示f[ste ...
- 繁华模拟赛 vicent的字符串
#include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...
- 繁华模拟赛 David与Vincent的博弈游戏
#include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...
- 20181228 模拟赛 T3 字符串游戏 strGame 博弈论 字符串
3 字符串游戏(strGame.c/cpp/pas) 3.1 题目描述 pure 和 dirty 决定玩 T 局游戏.对于每一局游戏,有n个字符串,并且每一局游戏由K轮组成.具体规则如下:在每一轮 ...
- [繁华模拟赛]Evensgn 剪树枝
Evensgn 剪树枝 题目 繁华中学有一棵苹果树.苹果树有 n 个节点(也就是苹果),n − 1 条边(也就 是树枝).调皮的 Evensgn 爬到苹果树上.他发现这棵苹果树上的苹果有两种:一 种是 ...
- noip模拟赛 解谜游戏
题目描述LYK进了一家古董店,它很想买其中的一幅画.但它带的钱不够买这幅画.幸运的是,老板正在研究一个问题,他表示如果LYK能帮他解出这个问题的话,就把这幅画送给它.老板有一个n*m的矩阵,他想找一个 ...
- 20180606模拟赛T4——数学游戏
数学游戏 题目描述: 小T又发脑残了,没错,她又要求奇怪的东西,这次她想知道[X,Y]之间整数有多少可以表示成K个不同的B的幂的和形势.如\(x,y,k,b=15,20,2,2\),则有: \[17= ...
- 20180606模拟赛T1——猫鼠游戏
题目描述: 猫和老鼠在10*10的方格中运动,例如: *...*..... ......*... ...*...*.. .......... ...*.C.... *.....*... ...*... ...
- 繁华模拟赛day8 牛栏
/* 标称并没有用到题解中提到的那种奇妙的性质,我们可以证明,正常从1开始走的话,需要T次,如何使这个次数减小?题解中提到一个办法,有一步小于n/t,我们考虑这一步,如果把它匀到左右两步中,则可以减小 ...
随机推荐
- diff: /../Podfile.lock: No such file or directory
从github上下载源码运行会报错:问题1描述: diff: /../Podfile.lock: No such file or directory diff: /Manifest.lock: No ...
- Javascript的字面量对象以及如何拆解字面量对象
简单的说,字面量对象提供了一直非常方便构建新对象的方式,它的格式非常简单且容易阅读.是大多数前端程序员在构建对象时比较推崇的一种方式. 格式: var person = { name : " ...
- 学习笔记——Maven实战(九)打包的技巧
“打包“这个词听起来比较土,比较正式的说法应该是”构建项目软件包“,具体说就是将项目中的各种文件,比如源代码.编译生成的字节码.配置文件.文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR ...
- 2.SQLAlchemy文档-SQLAlchemy ORM(中文版)
接下来,我们将会对对象关系映射器进行全面的介绍和描述.如果你想用它为你的应用程序构建更高层次的SQL操作模式,以及为你的Python对象提供自动化的持久性功能,那么首先进行下列教程的学习吧. 首先请看 ...
- 10.C#匿名函数的变量捕获(五章5.5)
首先感谢园友的指定,后续的文章一定会多码多想,出来的文章才有说服力.那今天接上篇我们来聊一聊匿名函数,对于匿名函数,我们知道使用delegate关键字,那我们来需要知道匿名函数在变量是的处理方式,先说 ...
- 项目笔记---C#异步Socket示例
概要 在C#领域或者说.net通信领域中有着众多的解决方案,WCF,HttpRequest,WebAPI,Remoting,socket等技术.这些技术都有着自己擅长的领域,或者被合并或者仍然应用于某 ...
- 1、面向对象以及winform的简单运用(开篇)
面向对象概述: 要学习好面向对象,我们应该从三个问题入手: 1.什么是面向对象? 2.为什么要面向对象? 3.该怎么面向对象? 面向对象,首先要有一个对象,那么对象是什么呢? 对象的定义是人们要进行研 ...
- PHP乱码问题,UTF-8(乱码)
一.HTML页面转UTF-8编码问题 1.在head后,title前加入一行: <meta http-equiv='Content-Type' content='text/html; chars ...
- Linux svn 回滚版本库
Linux代码 svn up Index/ 然后找出要撤销的确切版本: Linux代码 svn log --limit 10 Index/tpl/css/global.css 根据log怀疑是 ...
- 每天一个linux命令(52):scp命令
scp 是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且 scp传输是加密的.可能会稍微影响一下速度.当你服 ...