AGC029C - Lexicographic constraints
记录我心路历程吧,这道小水题暴露出我很多问题。
给定 \(n\) 个字符串长度 \(a_i\) ,求字符集最小多大,才能构造出按字典序比较 \(s_1 < s_2 < \dots < s_n\)。
当 \(a_i < a_{i+1}\) 时,显然全补 \(0\) 就行。否则,是一个高精度 \(+1\)。二分字符集大小,判断行不行。
以下是我做题过程。
首先,除了二分部分,全部推出来了。但是加法的细节写烂了,各种没判。
然后没有特判字符集为 \(1\) 的情况,硬是跑了 1e9 差点T。(最后改改还是T了)
然后考虑贪心的过程,写了一个错的。在字符不够的时候新开一个,实际上会导致前面的浪费。
blog 写到最后发现还是一道sb题,就当水了一个 blog 吧。
#include <bits/stdc++.h>
const int MAXN = 500010;
int n, st[MAXN], col[MAXN], top;
void add() {
if (st[top] > 1 && st[top - 1] != st[top] - 1) {
st[top + 1] = st[top];
col[top + 1] = col[top];
--st[top]; ++top;
}
++col[top];
}
int A[MAXN];
bool judge(int cnt) {
int lst = 0;
memset(st, 0, top + 1 << 2);
memset(col, 0, top + 1 << 2);
top = 0;
for (int i = 1, t; i <= n; ++i) {
t = A[i];
if (lst < t) {
if (!top || col[top] != 0) st[++top] = t, col[top] = 0;
else st[top] = t;
} else {
int k = -1;
while (st[top] > t) k = col[top], --top;
if (st[top] != t) st[++top] = t, col[top] = k;
if (cnt > 1) {
add();
while (top && col[top] >= cnt) {
int at = st[top]; --top;
if (st[top] + 1 != at)
st[++top] = at - 1;
add();
}
} else top = 0, col[0] = 1;
if (col[0]) return false;
if (st[top] != t) st[++top] = t, col[top] = 0;
}
lst = t;
}
return true;
}
int main() {
std::ios_base::sync_with_stdio(false), std::cin.tie(0);
std::cin >> n;
for (int i = 1; i <= n; ++i) std::cin >> A[i];
int l = 1, r = n, ans = 0;
while (l <= r) {
int mid = l + r >> 1;
if (judge(mid)) ans = mid, r = mid - 1;
else l = mid + 1;
}
std::cout << ans << std::endl;
return 0;
}
AGC029C - Lexicographic constraints的更多相关文章
- [Atcoder AGC029C]Lexicographic constraints
题目大意:给定$n$个字符串的长度$a_i$,问至少用几种字符可以构造出字符串$s_1\sim s_n$,满足$|s_i|=a_i$且$s_1<s_2<\cdots<s_n$. $ ...
- 「AGC029C」Lexicographic constraints
「AGC029C」Lexicographic constraints 传送门 好像这个题非常 easy. 首先这个答案显然具有可二分性,所以问题转化为如何判定给定的 \(k\) 是否可行. 如果 \( ...
- [Agc029C]Lexicographic constraints_进制_二分答案_贪心
Lexicographic constraints 题目链接:https://atcoder.jp/contests/agc029/tasks/agc029_c 数据范围:略. 题解: 二分是显然的, ...
- AT4502-[AGC029C]Lexicographic constraints【二分,栈】
正题 题目链接:https://www.luogu.com.cn/problem/AT4502 题目大意 给出\(n\)个长度\(S\),求一个最小\(m\)表示用大小为\(m\)的字符集构造出\(n ...
- 【AtCoder】AGC029(A-E)
A - Irreversible operation 题解 把每个B后面的W个数累加起来即可 代码 #include <bits/stdc++.h> #define fi first #d ...
- Go build constraints
Go语言有一个不(奇)错(葩)的设计,就是build constraints(构建约束).可以在源码中通过注释的方式指定编译选项,比如只允许在linux下,或者在386的平台上编译啊之类的:还可以通过 ...
- Unable to simultaneously satisfy constraints.
在进行版本的迭代更新时,新功能需求需要对主页面的UI进行重新的布局,但是,报了错误,出了好多约束方面的问题: Unable to simultaneously satisfy constraints. ...
- Drop all the tables, stored procedures, triggers, constraints and all the dependencies in one SQL statement
Is there any way in which I can clean a database in SQl Server 2005 by dropping all the tables and d ...
- 自动布局报错(两条连线冲突):Unable to simultaneously satisfy constraints
这个报错有些长: Unable to simultaneously satisfy constraints. Probably at least one of the constraints i ...
随机推荐
- PHP学习之PHP的语法糖
PHP的语法糖 计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用. 常见的PHP的语法糖 echo(),print(),die(),isset(),unset(),i ...
- 20190716-Python网络数据采集/第 2 章 复杂HTML解析
# P29/9# 解析,要考虑到可持续性问题,对方反爬修改后,仍继续有效,方为优秀代码# 解析一个目标网页前,需要做到以下几点:(1)明确目标内容:(2)寻找“打印此页”的链接,或查看网站有无HTML ...
- 基于bootstrap selectpicker ,实现select下拉框模糊查询功能
1.html代码块 需要引入bootstrap的css js jquery bootstrap.css bootstrap-select.min.css jquery-1.11.3.min.js bo ...
- 作业10:String类
一.基本案例 1.new String("helloworld") 与 "helloworld" public static void main(String[ ...
- vue中的键盘事件
@keydown(键盘按下时触发),@keypress(键盘按住时触发),@keyup(键盘弹起) 获取按键的键码 e.keyCode @keyup.13 按回车键 @keyup.enter ...
- 【转】CSS之Background-Position left right center top bottom属性
background-position:left top; 背景图片的左上角和容器(container)的左上角对齐,超出的部分隐藏. 等同于 background-position:0,0; 也等同 ...
- 宝塔 + 阿里云ECS + MySql + Navicat 远程连接数据库
宝塔 + 阿里云ECS + MySql + Navicat 远程连接 1. root登录: 2. grant all privileges on *.* to root@'%' identified ...
- 解决织梦5.7添加新变量出现:Request var not allow!的办法
找到:根目录->include->common.inc.phpif( strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_ ...
- 【Day3】1.正则表达式
1.正则表达式 2.案例 关闭贪婪模式
- 实时跟踪之TRACA
背景: 目前,在实时跟踪领域存在着越来越多的先进方法,同时也极大地促进了该领域的发展.主要有两种不同的基于深度学习的跟踪方法:1.由在线跟踪器组成,这些跟踪器依赖网络连续的微调来学习目标的变化外观,精 ...