[NOIP模拟]Modern Art2
来源:互联网 发布:中国城市化率数据 编辑:程序博客网 时间:2024/05/17 01:53
题目描述:
样例输入 :
7
0
1
4
5
1
3
3
样例输出 :
2
样例解释:
在第一组样例中,月网首先选择[2,5]和[6,7]这两个区间,分别涂上颜色1 和 3。 然后选择[3,3]和[4,4]这两个区间,分别涂上颜色 4和 5。 (当然也有其它方案,但都至少需要两次操作)
数据范围:
30%的数据:N<=500
50%的数据: N<=10000
100% 的数据:N<=100000
题目分析:
做法:在读入时我们可以记录一个颜色的左边界和有边界。然后一次扫一遍,如果当前点是一种颜色的左边界,入栈,top++;如果是一种颜色的右边界,分两种情况:1、此时栈顶是它本身,出栈,top- -,1、此时栈顶不是它本身,则无解,输出-1。最后ans为整个过程中最大的top。
现在解释:首先这样出栈入栈,对于一种颜色的左右边界里如果有其它颜色,那么就无法同一次完成,操作次数增加。而一旦过了那种颜色右边界,后面的颜色就不会相互影响,可以同一次操作完成。top就代表了当前所需次数。例如样例:145133,1,top=1;4,top=2;4,top=1;5,top=2;5,top=1;1,top=0;3,top=1;3,top=0。ans=max(top)=2。考虑无解的情况,如果到了一种颜色右边界,发现它自己不是栈顶,那么说明至少有另一种颜色还未到其右边界,而这些颜色的左边界又在当前颜色左边界的右边,这就出现了一种交替覆盖的情况,如:1212,显然这办不到。
附代码:
#include<iostream>#include<cstring>#include<string>#include<cstdlib>#include<cstdio>#include<ctime>#include<queue>#include<set>#include<iomanip>#include<vector>#include<cctype>#include<cmath>#include<algorithm>using namespace std;const int maxn=1e5+10;int n,ans,top,a[maxn],sta[maxn],maxl[maxn],maxr[maxn];int readint(){ char ch;int i=0,f=1; for(ch=getchar();(ch<'0'||ch>'9')&&ch!='-';ch=getchar()); if(ch=='-') {ch=getchar();f=-1;} for(;ch>='0'&&ch<='9';ch=getchar()) i=(i<<3)+(i<<1)+ch-'0'; return i*f;}int main(){ //freopen("lx.in","r",stdin); n=readint(); for(int i=1;i<=n;i++) { a[i]=readint(); if(a[i]==0) continue; if(maxl[a[i]]==0) maxl[a[i]]=i; maxr[a[i]]=i; } for(int i=1;i<=n;i++) { if(i==maxl[a[i]]) { sta[++top]=a[i]; ans=max(ans,top); } if(i==maxr[a[i]]) { if(sta[top]==a[i]) --top; else { printf("-1"); return 0; } } } printf("%d",ans); return 0;}
阅读全文
1 0
- [NOIP模拟]Modern Art2
- [NOIP2017模拟]art2
- Noip模拟
- 【NOIP模拟】20151004模拟
- 【NOIP模拟】 20151005模拟
- 【NOIP模拟】 20151006模拟
- 【NOIP模拟】 20151007模拟
- 【NOIP模拟】20151014模拟
- 【NOIP模拟】20151015模拟
- 【09 NOIP 模拟】light
- [NOIP模拟]Day1
- 8.9CH NOIP模拟
- 8.10FCH NOIP模拟
- 8.13NOIP模拟
- 8.14NOIP模拟
- noip模拟赛 双城记
- Noip模拟总结
- 【noip模拟赛】密码
- Qt网络编程--HTTP服务器(一)
- Unity14--物理系统--刚体、触发器、Force和Toque扭矩、恒力
- java 资料 各版本的API(中文版,英文版)
- 深入理解子查询
- 全志H3-NanoPi开发板SDK之二准备编译环境
- [NOIP模拟]Modern Art2
- 网易2018内推笔试题_操作序列_C++
- Spring集成redis【脱离Spring版本的】
- subl+zeal
- oracle执行顺序
- C++编程->使用Winpcap接口编程抓取数据
- 树状数组从前往后求和,用来解第k大(或小)的数 poj 2985 The k-th Largest Group
- js判断图片是否存在,不存在则替换为默认图片
- 欢迎使用CSDN-markdown编辑器