[luoguP3668] [USACO17OPEN]Modern Art 2 现代艺术2(栈)
还是一个字——栈
然后加一大堆特判
至少我是这么做的
我的代码
#include <cstdio>
#include <iostream>
#define N 100001
#define max(x, y) ((x) > (y) ? (x) : (y)) int s[N], a[N], b[N];
int n, top, ans; inline int read()
{
int x = 0, f = 1;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return x * f;
} int main()
{
int i, x;
n = read();
for(i = 1; i <= n; i++)
{
a[i] = read();
b[a[i]]++;
}
for(i = 1; i <= n; i++)
{
if(!top && !a[i]) continue;
else if(!a[i])
{
s[++top] = a[i];
continue;
}
if(s[top] == a[i] && b[a[i]] > 1)
{
ans = max(ans, top);
b[a[i]]--;
}
else if(s[top] == a[i] && b[a[i]] == 1)
{
ans = max(ans, top);
b[a[i]]--;
top--;
}
else if(b[a[i]] == 1) ans = max(ans, top + 1);
else
{
s[++top] = a[i];
b[a[i]]--;
}
}
if(top) puts("-1");
else printf("%d\n", ans);
return 0;
}
看了题解
发现预处理出来每种颜色最左边和最右边的位置会更好处理
如果两种颜色有交集,直接输出-1
题解代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n;
int a[100008],l[100008],r[100008];
int s[100008],top;
int tmp,ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
if(!l[a[i]]) l[a[i]]=i;
r[a[i]]=i;
}
for(int i=1;i<=n;i++){
if(a[i]==0){
if(top){
cout<<-1;
return 0;
}
else continue;
}
if(l[a[i]]==i){
if(top&&r[a[i]]>r[s[top]]){
cout<<-1;
return 0;
}
s[++top]=a[i];
tmp++;
ans=max(ans,tmp);
}
if(r[a[i]]==i){
top--;
tmp--;
}
}
cout<<ans;
return 0;
}
5
1 2 1 2 1
这组数据,我输出-1,题解输出2
好像题解错了,但因为数据水,所以,你懂的
[luoguP3668] [USACO17OPEN]Modern Art 2 现代艺术2(栈)的更多相关文章
- 洛谷P3668 [USACO17OPEN]Modern Art 2 现代艺术2
P3668 [USACO17OPEN]Modern Art 2 现代艺术2 题目背景 小TY的同学HF也想创作艺术 HF只有一块长条状的画布(画条),所以每一次涂色只能涂上连续几个单位的颜料,同样新的 ...
- [LuoguP3668][USACO17OPEN]现代艺术2
[LuoguP3668][USACO17OPEN]Modern Art2(Link) 现在你有一块长为\(N\)的画布,每次可以选择一段连续的区间进行颜色填涂,新颜色会覆盖旧颜色.每一次填涂都要耗费一 ...
- bzoj 4780: [Usaco2017 Open]Modern Art 2
4780: [Usaco2017 Open]Modern Art 2 Time Limit: 10 Sec Memory Limit: 128 MB Description Having becom ...
- lesson 18 Electric currents in modern art
lesson18 Electric currents in modern art electricity n. 电力:电流; electric adj. 电的:电动的; electronic adj. ...
- [Usaco2017 Open]Modern Art 2
Description Having become bored with standard 2-dimensional artwork (and also frustrated at others c ...
- BZOJ2368 : Modern Art Plagiarism 树同构
枚举$T_1$的树根,然后DP,设$f[i][j]$表示$T_1$的子树$i$是否存在包括i的连通子树与$T_2$的子树$j$同构. 若$j$是叶子,那么显然可以. 若$deg_i<deg_j$ ...
- [BZOJ4776] [Usaco2017 Open]Modern Art(差分 + 思维?)
传送门 可以预处理出每种颜色的上下左右的位置,这样就框出来了一个个矩形,代表每种颜色分别涂了哪里. 然后用二维的差分. 就可以求出来每个位置至少涂了几次,如果 > 1 的话,就肯定不是先涂的, ...
- Lesson 26 The best art critics
Text I am an art student and I paint a lot of pictures. Manay people pretend that they understand mo ...
- Lesson 23 A new house
Text I had a letter from my sister yesterday. She lives in Nigeria. In her letter, she said that she ...
随机推荐
- setuid
-r-s--x--x #s就是setuid,仅可用在二进制文件,对目录设置无效
- C#调用CMD程序
最近写了两个小程序都要调用Windows自带的命令行程序,一个是调用Openfiles.exe查询正在编辑的共享文档,一个是调用DiskPart.exe查询硬盘状态.两种命令行程序调用有点不同,记录一 ...
- java中的堆与栈
Java 中的堆和栈 Java把内存划分成两种:一种是栈内存,一种是堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配 . 当在一段代码块定义一个变量时,Java就在栈中 ...
- 历史管理 onhashchange
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Bootstrap 翻页(pager)
如果您想要创建一个简单的分页链接为用户提供导航,可以通过翻页来实现.与分布链接一样,也是一个无序列表.默认情况下,翻页是居中显示的.下面列出了bootstrap处理翻页的类. Class 描述 示例代 ...
- 【技巧:字符串同构】Avendesora
判断字符串“同构”的技巧 题目大意 给定A,B两个序列,要求B在A中出现的次数以及位置.定义字符变换:把所有相同的字符变为另一种字符:两个字符串相等:当且仅当一个字符串可以在若干次字符变换之后变为另一 ...
- mysql8忘记root密码修改密码(mac)
0.在/etc/my.cnf修改验证方式 [mysqld] default_authentication_plugin=mysql_native_password 1.切换root权限: sudo s ...
- php框架的特性总结
今天面试问到了php框架的特性,特此在这汇总一下,方便以后查看. Thinkphp 3.2特性: 1.多表查询非常方便,在model 里几句代码就可以完成完成多表的关联操作. 2.融合了smarty ...
- datetime模块,random模块
6.10自我总结 1.datetime模块(用于修改日期) import datetime print(datetime.datetime.now(),type(datetime.datetime.n ...
- pytorch 加载数据集
pytorch初学者,想加载自己的数据,了解了一下数据类型.维度等信息,方便以后加载其他数据. 1 torchvision.transforms实现数据预处理 transforms.Totensor( ...