CF1092(div3):Great Vova Wall (栈)(还不错)
D1. Great Vova Wall (Version 1):
题意:给定长度为N的墙,以及每个位置的一些高度,现在让你用1*2的砖和2*1的砖去铺,问最后能否铺到高度一样。
思路:分析其奇偶性,在一个位置加1*2的砖,其奇偶性不变。在相邻的而且高度相同的位置加2*1的砖,两个奇偶行都改变。那么我们不需要保存高度,因为高度我们可以加1*2的砖,使他们等效到奇偶性的高度;所以只需要保存奇偶,然后加入栈中,如果栈顶的两个元素相同,则可以消去,最后如果栈元素<=1,则ok。
(如果最后栈为空,说明最后高度可奇可以偶;否则,最后的高度由栈里剩下的一个元素奇偶性决定。
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int a[maxn],q[maxn],top;
bool get(int N)
{
top=;
for(int i=;i<=N;i++){
q[++top]=a[i];
if(top>=&&q[top]==q[top-]) top-=;
}
if(top<=) return true;
return false;
}
int main()
{
int N; scanf("%d",&N);
rep(i,,N) scanf("%d",&a[i]),a[i]=a[i]&;
if(get(N)) return puts("YES"),;
puts("NO");
return ;
}
D2. Great Vova Wall (Version 2)
题意:和上面一样,只是现在只能铺2*1的砖。
思路:开始想简单了,以为是贪心即可,比如1,3,2,贪心出来可以铺,错的。事后想还是应该用栈去做。
还是用消去的思想去想,如果连续的两个相同,我们就可以消去;如果我在中间消去了一段,那么这一段的两边可以拼接起来,那么如果这两边的相同,我们是否也可以消去了呢?不一定,比如1,2,2,1;我们消去了(2,2),不可以消去(1,1);原因是被中间的更高的阻断了,我们所以维护栈的时候记录以下中间的消去的值,如果比栈顶的大,则栈顶暂时不能消去。
(而D1不需要考虑这个问题,是因为D1的高度没什么约束性,只考虑奇偶。
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int a[maxn],Mx,q[maxn],h[maxn],top;
int main()
{
int N; scanf("%lld",&N);
rep(i,,N) scanf("%d",&a[i]),Mx=max(Mx,a[i]);
rep(i,,N) {
q[++top]=a[i];
if(top>&&q[top]==q[top-]){
if(q[top]<h[top-]) continue;
top-=,h[top]=q[top+];
h[top+]=; h[top+]=;
}
}
if(top==||(top==&&q[top]==Mx)) puts("YES");
else puts("NO");
return ;
}
CF1092(div3):Great Vova Wall (栈)(还不错)的更多相关文章
- CodeForces Round #527 (Div3) D2. Great Vova Wall (Version 2)
http://codeforces.com/contest/1092/problem/D2 Vova's family is building the Great Vova Wall (named b ...
- Codeforces Round #527-D1. Great Vova Wall (Version 1)(思维+栈)
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- CodeForces Round #527 (Div3) D1. Great Vova Wall (Version 1)
http://codeforces.com/contest/1092/problem/D1 Vova's family is building the Great Vova Wall (named b ...
- Codeforces Round #527 (Div. 3) D1. Great Vova Wall (Version 1) 【思维】
传送门:http://codeforces.com/contest/1092/problem/D1 D1. Great Vova Wall (Version 1) time limit per tes ...
- Java学到什么程度能找到一份还不错的工作
我的读者里有很多 Java 新人,新人是指正在学 Java 的.以及工作时间不长的年轻人,他们经常问我一个问题: Java 学到什么程度才能找到一份还不错的工作? 今天我就从我自己面试新人的角度来回答 ...
- android studio还不错
今天体验了哈 Android Studio,还不错同Elipse类似
- 上一篇括号配对让人联想起catalan数,顺便转载一篇归纳的还不错的文章
转载请注明来自souldak,微博:@evagle 怎么样才是合法的组合? 只要每一时刻保证左括号的数目>=右括号的数目即可. 直接递归就行,每次递归加一个括号,左括号只要还有就能加,右括号要保 ...
- JS组件系列——再推荐一款好用的bootstrap-select组件,亲测还不错
前言:之前分享过两篇bootstrap下拉框的组件:JS组件系列——两种bootstrap multiselect组件大比拼 和 JS组件系列——Bootstrap Select2组件使用小结 ,收 ...
- 【原创】PicUploader: 一个还不错的图床工具
PicUploader PicUploader 是一个用php编写的图床工具,它能帮助你快速上传你的图片到云图床,并自动返回Markdown格式链接到剪贴板.配置完成后,要获取一个可用于markdow ...
随机推荐
- 《剑指offer》第六题(重要!从尾到头打印链表)
文件main.cpp // 从尾到头打印链表 // 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. #include <iostream> #include <sta ...
- 微信小程序跳到h5,h5在跳回小程序
1.在微信小程序后台: 设置->开发设置->业务域名: 添加业务逻辑域名 2.在html5页面添加如下代码: <! -- html --> < script type=& ...
- Linux系统基本常识
在虚拟机里装一个Linux(centos),有时间可以装个mac玩一下.(使用centos或者Ubuntu时安装软件将会非常方便) ifconfig –a 显示当前Linux主机的 ip 地址 如何让 ...
- java向文件中添加数据---手动版日志添加
核心代码为创建多级文件夹创建 //目标文件 File file=new File(filePath); //若不存在即创建文件 if(!file.exists()) { if (!file.getPa ...
- 检测Linux glibc幽灵漏洞和修补漏洞
1.首先安装rpm : sudo apt-get install rpm wget -OGHOST-test.sh http://www.antian365.com/lab/linux0day/G ...
- HDOJ1008
#include "iostream" using namespace std; int main() { ) { int n; cin >> n; ) break; ...
- OAF 通过个性化 在标准事件上添加验证
在实际的开发过程中,我们经常会遇到以下情况: 在执行标准的功能之前要对个性化的内容进行校验. 比如:在某个标准页面通过个性化添加了一个勾选框,在点击下一步的时候必须去验证此勾选框是否勾选. 具体实现如 ...
- 使用iview-project 打包build报错,ERROR in xxxxx.cheunk.js from UglifyJs
一.iview-project 为iview官方推荐工程,一个基于iview的vue脚手架 github网址:https://github.com/iview/iview-project 废话不多说 ...
- 51nod1482
题解: 发现是一个环,而环的题目有一些就是要转化成为链 首先找到一个最高点,中间断开 然后当作一条链来做 代码: #include<cstdio> #include<algorith ...
- python 数据科学
参考资料: https://www.yiibai.com/python_data_science/python_bubble_charts.html