题意:自己搜吧。。。

思路:

记二元组\((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] 简单的填数的更多相关文章

  1. NOIP模拟测试「简单的区间·简单的玄学·简单的填数·简单的序列」

    简单的区间 $update$ 终于$AC$了 找到$(sum[r]+sum[l](sum表示以中间点为基准的sum)-mx)\%k==0$的点 注意这里$sum$表示是以$mid$为基准点,(即$su ...

  2. noip模拟12[简单的区间·简单的玄学·简单的填数]

    noip模拟12 solutions 这次考试靠的还是比较好的,但是还是有不好的地方, 为啥嘞??因为我觉得我排列组合好像白学了诶,文化课都忘记了 正难则反!!!!!!!! 害没关系啦,一共拿到了\( ...

  3. [CSP-S模拟测试]:简单的填数(贪心+模拟)

    题目描述 对于一个长度为$n$,且下标从$1$开始编号的序列$a$,我们定义它是「合法的」,当且仅当它满足以下条件:·$a_1=1$·对于$i\in [1,n),a_i\leqslant a_{i+1 ...

  4. NOIP 模拟 $12\; \text{简单的填数}$

    题解 一个纯的贪心,被我搞成 \(dp\) 了,最后把错解删掉了,骗了 \(10pts\) 考虑如何贪心,设置一种二元组 \((x,l)\),\(x\) 表示当前值,\(l\) 表示当前最长连续长度. ...

  5. <蛇形填数>--算法竞赛 入门经典(第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   ...

  6. 蓝桥杯 方格填数 DFS 全排列 next_permutation用法

    如下的10个格子(参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数.注意:你提交的应该是一个 ...

  7. 蓝桥杯 2014本科C++ B组 六角填数 枚举排列

    标题:六角填数 如图[1.png]所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填 ...

  8. ACM_螺旋填数

    螺旋填数 Time Limit: 2000/1000ms (Java/Others) Problem Description: 一天,小明在研究蜗牛的壳时,对其螺旋状的花纹感到十分有趣.于是他回到了家 ...

  9. [Noip2018]填数游戏

    传送门 Description 耳熟能详,就不多说了 Solution 对于一个不会推式子的蒟蒻,如何在考场优雅地通过此题 手玩样例,发现对于 \(n=1\) , \(ans=2^m\) .对于 \( ...

随机推荐

  1. 分布式锁实现(一):Redis

    前言 单机环境下我们可以通过JAVA的Synchronized和Lock来实现进程内部的锁,但是随着分布式应用和集群环境的出现,系统资源的竞争从单进程多线程的竞争变成了多进程的竞争,这时候就需要分布式 ...

  2. C# 三层架构的一个小练习(Winfrom与SQLite数据库组合)

    本文文字方面引用 微冷的風丶(博客地址:https://www.cnblogs.com/smbk/) 代码部分是本人亲自写的一个sqlite数据库的最简单登录界面练手(当时写的太烂了,现在回顾重构一下 ...

  3. 数据结构(c语言版,严蔚敏)第1章绪论

    第1章严蔚敏

  4. redis-config.properties属性资源文件

    redis.host=192.168.200.128redis.port=6379redis.pass=redis.database=0redis.maxIdle=300redis.maxWait=3 ...

  5. cookie和session 的初步介绍

    Cookie和Session http协议不保存用户状态(信息) Cookie和Session都是为了能够保存用户信息 Cookie: 本质:保存在浏览器上的键值对 用途:标识当前用户信息 cooki ...

  6. java中EL表达式怎么获取网站的根目录

    ${pageContext.request.contextPath} <a href="${pageContext.request.contextPath}/login.jsp&quo ...

  7. 树分基础 bzoj 1468

    我们对于一棵树,我们找一个根,然后统计过这个点的路径有多少符合要求.怎么搞呢?我们可以先维护一个数据结构,然后把先把根作为一个距离自己为0的点放进去,然后对于每一棵子树,先找出所有的与之前的数据结构的 ...

  8. python 调用redis

    #!/usr/bin/env python #_*_ coding:UTF-8 _*_ import redis import pickle #普通连接 ''' db="db1" ...

  9. Elasticsearch介绍和安装与使用

    转载:https://blog.csdn.net/weixin_42633131/article/details/82902812 1.Elasticsearch介绍和安装 1.1.简介1.1.1.E ...

  10. CSS3 Media Queries模板:max-width和min-width

    CSS3 Media Queries模板 CSS3 Media Queries一般都是使用“max-width”和“min-width”两个属性来检查各种设备的分辨大小与样式表所设条件是否满足,如果满 ...