[JZOJ 5811] 简单的填数
题意:自己搜吧。。。
思路:
记二元组\((x,l)\)表示当前为\(x\)且之前有\(l\)个连续数与\(x\)相同。
并且维护up和low数组表示取到最大/最小值时,连续序列的长度。
正一遍,反一遍,搞定。
我排序手抖达成\(a.r and b.r\),调了1小时...
#include <bits/stdc++.h>
using namespace std;
const int maxn = 200010;
inline int read () {
int q=0,f=1;char ch = getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;ch=getchar();
}
while(isdigit(ch)){
q=q*10+ch-'0';ch=getchar();
}
return q*f;
}
struct node {
int l,r;
}up[maxn],low[maxn];
node Max(node a,node b) {
if(a.l > b.l||(a.l == b.l && a.r > b.r)) return a;
else return b;
}
node Min(node a,node b) {
if(a.l > b.l||(a.l == b.l && a.r > b.r)) return b;
else return a;
}
int n;
int a[maxn];
int ans[maxn];
int w[maxn];
node t1,t2;
int main () {
freopen("seq.in","r",stdin);
freopen("seq.out","w",stdout);
n = read();
up[0].r = 2;
low[0].r = 5;
for(int i = 1;i <= n; ++i) {
a[i] = read();
t1 = up[i - 1];
if(t1.r + 1 > 2) {
t1.l ++;
t1.r = 1;
}
else t1.r ++;
t2.l = a[i];
t2.r = 2;
if(a[i]) {
up[i] = Min(t1,t2);
}
else up[i] = t1;
t1 = low[i - 1];
if(t1.r + 1 > 5) {
t1.l ++;
t1.r = 1;
}
else {
t1.r ++;
}
t2.r = 1;
if(a[i]) {
low[i] = Max(t1,t2);
}
else low[i] = t1;
}
if(a[1] > 1) {
puts("-1");
return 0;
}
if(up[n].r == 1) {
up[n].l --;
}
for(int i = 1;i <= n; ++i) {
if(a[i]) {
if(a[i] < low[i].l || a[i] > up[i].l) {
puts("-1");
return 0;
}
ans[i] = a[i];
}
if(up[i].l < low[i].l) {
puts("-1");
return 0;
}
}
ans[n] = up[n].l;
w[ans[n]] ++;
for(int i = n - 1;i; --i) {
if(!a[i]) {
ans[i] = min(ans[i + 1],up[i].l);
if(w[ans[i]] == 5) {
ans[i] --;
}
}
w[ans[i]] ++;
}
printf("%d\n",ans[n]);
for(int i = 1;i <= n; ++i) {
printf("%d ",ans[i]);
}
return 0;
}
[JZOJ 5811] 简单的填数的更多相关文章
- NOIP模拟测试「简单的区间·简单的玄学·简单的填数·简单的序列」
简单的区间 $update$ 终于$AC$了 找到$(sum[r]+sum[l](sum表示以中间点为基准的sum)-mx)\%k==0$的点 注意这里$sum$表示是以$mid$为基准点,(即$su ...
- noip模拟12[简单的区间·简单的玄学·简单的填数]
noip模拟12 solutions 这次考试靠的还是比较好的,但是还是有不好的地方, 为啥嘞??因为我觉得我排列组合好像白学了诶,文化课都忘记了 正难则反!!!!!!!! 害没关系啦,一共拿到了\( ...
- [CSP-S模拟测试]:简单的填数(贪心+模拟)
题目描述 对于一个长度为$n$,且下标从$1$开始编号的序列$a$,我们定义它是「合法的」,当且仅当它满足以下条件:·$a_1=1$·对于$i\in [1,n),a_i\leqslant a_{i+1 ...
- NOIP 模拟 $12\; \text{简单的填数}$
题解 一个纯的贪心,被我搞成 \(dp\) 了,最后把错解删掉了,骗了 \(10pts\) 考虑如何贪心,设置一种二元组 \((x,l)\),\(x\) 表示当前值,\(l\) 表示当前最长连续长度. ...
- <蛇形填数>--算法竞赛 入门经典(第2版)- 3.1 数组 程序3-3 蛇形填数
蛇形填数: 在n×n方阵里填入1,2,....,n×n,要求填成蛇形.例如,n = 4 时方阵为: 10 11 12 1 9 16 13 2 8 15 14 3 7 ...
- 蓝桥杯 方格填数 DFS 全排列 next_permutation用法
如下的10个格子(参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数.注意:你提交的应该是一个 ...
- 蓝桥杯 2014本科C++ B组 六角填数 枚举排列
标题:六角填数 如图[1.png]所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填 ...
- ACM_螺旋填数
螺旋填数 Time Limit: 2000/1000ms (Java/Others) Problem Description: 一天,小明在研究蜗牛的壳时,对其螺旋状的花纹感到十分有趣.于是他回到了家 ...
- [Noip2018]填数游戏
传送门 Description 耳熟能详,就不多说了 Solution 对于一个不会推式子的蒟蒻,如何在考场优雅地通过此题 手玩样例,发现对于 \(n=1\) , \(ans=2^m\) .对于 \( ...
随机推荐
- Java中的时间日期Date和Calendar
日期时间类 Date: Date类的构造方法: 可以发现Date类的toString方法被重写了. Date类的方法: SimpleDateFormat 它提供了解决Date输出问题的解决方案--格式 ...
- Thread.Join理解
Thread.Join:Blocks the calling thread until a thread terminates MainThread里面起了一个SubThread,从SubThread ...
- vue-cli 3.0版本,配置代理Proxy,不同环境不同target(生产环境,uat环境和本地环境的配置)
1.在项目的的根目录下新建vue.config.js 2.新建一个config包,里面存放不同的环境文件,里面包含:pro.env.js(生产环境配置),uat.env.js(测试环境配置),dev. ...
- leetcood学习笔记-35-二分法
题目: 第一次提交; class Solution: def searchInsert(self, nums: List[int], target: int) -> int: for i in ...
- [7.18NOIP模拟测试5]砍树 题解(数论分块)
题面(加密) 又考没学的姿势……不带这么玩的…… 考场上打了个模拟 骗到30分滚粗了 稍加思考(滑稽)可将题面转化为: 求一个最大的$d$,使得 $\sum \limits _{i=1}^n {(\l ...
- ES数据导入导出
ES数据导入导出 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...
- selenium工作的大概原理
selenium的原理是什么? selenium的原理涉及到3个部分,分别是 浏览器 driver: 一般我们都会下载driver client: 也就是我们写的代码 client其实并不知道浏览器是 ...
- XML XPATH simpleXML
XPath 通过DOM结构定位节点,在数据量很大的情况下速度下降的很厉害.解决方法是XPath.Xpath的作用:用于快速定位节点 position()是节点的位置,节点的位置是从1开始 simple ...
- HDU 6697 Closest Pair of Segments (计算几何 暴力)
2019 杭电多校 10 1007 题目链接:HDU 6697 比赛链接:2019 Multi-University Training Contest 10 Problem Description T ...
- Vim多窗口编辑
在Linux中使用vim编辑多个窗口 方式: 1. vim -o file1 file2 打开的两个文件上下窗口分布 比如当前目录有makefil ...