[Atcoder AGC029C]Lexicographic constraints
题目大意:给定$n$个字符串的长度$a_i$,问至少用几种字符可以构造出字符串$s_1\sim s_n$,满足$|s_i|=a_i$且$s_1<s_2<\cdots<s_n$。 $ n\leqslant 2\times10^5,1\leqslant a_i\leqslant10^9 $
题解:发现这个有可二分性,而在确定字符集大小的情况下,判断是否合法较为简单。当$a_i>a_{i-1}$时,在后面补最小的字符;否则就去掉尾部的字符,然后做一个“加法”,考虑到位数较多,可以用$\mathrm{map}$来记录每一个位置的字符。
卡点:在二分中把字符集为$1$加入判断,导致$\mathrm{TLE}$
C++ Code:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <map>
const int maxn = 2e5 + 10; int n, a[maxn], p, flag = 1;
bool check(int k) {
std::map<int, int> M; M.clear();
for (int i = 1; i <= n; ++i) if (a[i] <= a[i - 1]) {
while (!M.empty() && M.rbegin() -> first > a[i]) M.erase(--M.end());
for (p = a[i]; p && ++M[p] == k; --p) M[p] = 0;
if (!p) return false;
}
return true;
} int main() {
std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
std::cin >> n;
for (int i = 1; i <= n; ++i) std::cin >> a[i], flag &= a[i] > a[i - 1];
if (flag) return std::cout << "1\n", 0;
int l = 2, r = n, ans = n;
while (l <= r) {
int mid = l + r >> 1;
if (check(mid)) r = mid - 1, ans = mid;
else l = mid + 1;
}
std::cout << ans << '\n';
return 0;
}
[Atcoder AGC029C]Lexicographic constraints的更多相关文章
- AGC029C - Lexicographic constraints
记录我心路历程吧,这道小水题暴露出我很多问题. 给定 \(n\) 个字符串长度 \(a_i\) ,求字符集最小多大,才能构造出按字典序比较 \(s_1 < s_2 < \dots < ...
- 「AGC029C」Lexicographic constraints
「AGC029C」Lexicographic constraints 传送门 好像这个题非常 easy. 首先这个答案显然具有可二分性,所以问题转化为如何判定给定的 \(k\) 是否可行. 如果 \( ...
- [Agc029C]Lexicographic constraints_进制_二分答案_贪心
Lexicographic constraints 题目链接:https://atcoder.jp/contests/agc029/tasks/agc029_c 数据范围:略. 题解: 二分是显然的, ...
- @atcoder - AGC036F@ Square Constraints
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个整数 N,统计有多少个 0~2N-1 的排列 \(P_0 ...
- 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 ...
- AtCoder Beginner Contest 082 B - Two Anagrams
题目链接:https://abc082.contest.atcoder.jp/tasks/abc082_b Time limit : 2sec / Memory limit : 256MB Score ...
- AtCoder Regular Contest 069 D
D - Menagerie Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement Snuke, w ...
- AtCoder Beginner Contest 069【A,水,B,水,C,数学,D,暴力】
A - K-City Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement In K-city, ...
随机推荐
- 浅谈MongoDB基础及架构
1.简述MongDB是一个强大.灵活而可扩展的数据存储系统,其将强大的可扩展特性与关系库最有用的特性进行了整合,像:次级索引,范围查询和排序等特性.而MongDB也内建了类似MapReduce汇聚和地 ...
- RMAN笔记
Rman常用命令 Preview选项 1) 显示用于还原system表空间数据文件的备份文件 RMAN> restore datafile 2 preview; 2) 显示用于还原特 ...
- 目标检测论文解读7——YOLO v2
背景 YOLO v1检测效果不好,且无法应用于检测密集物体. 方法 YOLO v2是在YOLO v1的基础上,做出如下改进. (1)引入很火的Batch Normalization,提高mAP和训练速 ...
- UiPath: Studio 快捷键
以下是 UiPath Studio 键盘快捷键的完整列表: 文件管理 Ctrl + Shift + N - 创建一个新的项目 Ctrl + O - 打开此前创建的工作流文件.仅仅支持扩展名为 .xam ...
- JRebel激活教程
JRebel的官方地址(https://zeroturnaround.com/software/jrebel),土豪可以自行去官网购买. 安装 打开IDEA-->setting-->plu ...
- python基础之函数重点
函数的返回值 现在有一个需求,比较两个人的月薪,然后想获取月薪较大人的年薪. 如果需要在程序中拿到函数的处理结果做进一步的处理,则需要函数必须要有返回值. 需要注意的是: return是一个函数结束的 ...
- CF1081C-Colorful Bricks-(dp||组合数)
http://codeforces.com/problemset/problem/1081/C 题意:有n个排成一行板块,有m种颜色,要让这些板块有k对相邻板块不同颜色,有多少种涂色方法? 比如样例2 ...
- 【oracle】根据日、月、年分组
--根据日期分组--------------------------------------------------- SELECT to_char(to_date(XXXX, 'yyyymmdd') ...
- Spring Cloud微服务安全实战_3-2_第一个API及注入攻击防护
1,本节主要讲了sql注入防范,如果使用mybatis,需要注意mapper.xml里面$会造成sql注入风险. 第一个 api 代码:https://github.com/lhy1234/sprin ...
- R语言学习(基本知识)
0)查看帮助 library(help="ballgown") #查看包帮助 getwd() #查看当前工作目录 setwd('C:/Users/djx/Desktop/信号肽系统 ...