题意:

给你一个串,现需要你给出一个子序列,满足26个约束条件,\(len(A_i) >= L_i\) 且 \(len(A_i) <= R_i\), \(A_i\)为从a到z的26个字母。

思路:

先用序列自动机(?)构造出某个位置后每个字母的个数,每个字母 的第一个位置。
然后每次贪心地加入最小的字符,加入的条件为当前字母加入后,后面的字符满足剩余的条件。
即剩余的字母\(A_i\)在不超\(R_i\)的情况下能构成k长度的串,剩余的字母\(A_i+\)已拿取字母\(A_i >= L_i\)且满足\(L_i\)所需的长度小于剩余可添加长度。

官方题解:

代码:

#include<cstdio>
#include<set>
#include<cmath>
#include<stack>
#include<vector>
#include<queue>
#include<cstring>
#include<string>
#include<sstream>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn = 1e5 + 5;
const ll INF = 1e18;
int nex[maxn][30];
char s[maxn];
int len, k;
int l[30], r[30];
int cnt[maxn][30], getnum[30];
char ans[maxn];
bool check(int pos, int nowlen){int len = 0;int dis = 0;for(int i = 0; i < 26; i++){if(getnum[i] + cnt[pos][i] < l[i]) return false;len += getnum[i] + min(r[i] - getnum[i], cnt[pos][i]);dis += max(0, l[i] - getnum[i]);}if(len < k) return false;if(dis > k - nowlen) return false;return true;
}
int main(){while(~scanf("%s%d", s + 1, &k)){len = strlen(s + 1);for(int i = 0; i < 26; i++){scanf("%d%d", &l[i], &r[i]);}memset(nex[len], -1, sizeof(nex[len]));memset(cnt[len], 0, sizeof(cnt[len]));for(int i = len - 1; i >= 0; i--){for(int j = 0; j < 26; j++){nex[i][j] = nex[i + 1][j];cnt[i][j] = cnt[i + 1][j];}nex[i][s[i + 1] - 'a'] = i + 1;cnt[i][s[i + 1] - 'a']++;}memset(getnum, 0, sizeof(getnum));int pos = 0, tot = 0;bool ok = true;while(pos <= len && tot < k){bool can = false;for(int i = 0; i < 26; i++){if(nex[pos][i] != -1 && getnum[i] < r[i]){getnum[i]++;if(check(nex[pos][i], tot + 1)){can = true;ans[tot++] = i + 'a';pos = nex[pos][i];break;}getnum[i]--;}}if(!can){ok = false;break;}}ans[tot] = '\0';if(ok) printf("%s\n", ans);else printf("-1\n");}return 0;
}

转载于:https://www.cnblogs.com/KirinSB/p/11230888.html

杭电多校HDU 6586 String(预处理 + 贪心)题解相关推荐

  1. 杭电多校 HDU 6641 TDL

    题意:给出一个公式 和公式上的m,k试着求是否有n可以符合上面的公式,若有这输出,没有这输出-1 思路: 1.对于f(n,m)因为与n互质的数很大所以求f(n,m)的时间复杂度并不是很高 2.对于给出 ...

  2. 2019 杭电多校 HDU - 6625 three arrays 字典树+贪心

    题目链接:https://cn.vjudge.net/problem/HDU-6625 题意:a和b两个数组n个数,数字任意组合异或,求得到c数组的字典序最小 题解:对于两个数组从高位到低位建立两个字 ...

  3. 2022杭电多校(一)

    2022杭电多校(一) 文章目录 2022杭电多校(一) 一.比赛小结 二.题目分析及解法(基础题) 1001.String 1002.Dragon slayer 1003.BackPack 1004 ...

  4. 杭电多校第七场 1011 Kejin Player HDU(6656)

    杭电多校第七场 1011 Kejin Player 题意:给你N行,代表从i级有花费a[i]元的r[i]/s[i]的概率达到i+1级,剩下的概率中可能会到达x[i]级.然后询问从L级到R级的花费会是多 ...

  5. 2019暑期杭电多校HDU6599 I Love Palindrome String

    2019杭电多校HDU6599 I Love Palindrome String 题目链接 I Love Palindrome String Time Limit: 4000/2000 MS (Jav ...

  6. 2022杭电多校第八场题解

    2022杭电多校第八场 Theramore(思维) 题意 给定一个01字符串,每次可以将一个奇数长度的区间翻转,求操作后字典序最小的字符串. 分析 翻转奇数长度的区间,元素位置的奇偶性不变,统计奇数位 ...

  7. 2019杭电多校 第七场 Kejin Player 6656(求期望值)

    2019杭电多校 第七场 Kejin Player 6656(求期望值) 题目 http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意 给你n,q.表示有n ...

  8. 2021杭电多校补题——第一场

    2021杭电多校补题--第一场 文章目录 Mod, Or and Everything Rocket land(待补) Puzzle loop(待补) Another thief in a Shop( ...

  9. 2022杭电多校(十)

    2022杭电多校(十) 文章目录 2022杭电多校(十) 一.比赛小结 二.题目分析及解法(基础题) 1001.Winner Prediction 1003.Wavy Tree 1004.Averag ...

  10. 2022杭电多校(二)

    2022杭电多校(二) 文章目录 2022杭电多校(二) 一.比赛小结 二.题目分析及解法(基础题) 1001.Static Query on Tree 1002.C++ to Python 1003 ...

最新文章

  1. gui窗口遮挡算法_基于 C 语言开发的 GUI 框架
  2. 堆垛管理,下料管理系统
  3. Spring事务管理器分类
  4. 【收藏】CentOS 7 安装NFS
  5. macappstore登不上去_武功山观星归来,缆车登顶,不徒步攻略!
  6. 搜索引擎分布式爬虫介绍
  7. 内核并发控制---中断屏蔽 (来自网易)
  8. BZOJ 4269: 再见Xor [高斯消元 线性基]
  9. 解决php保存文件时文件名乱码问题
  10. SQL 优化推荐书单
  11. 微信打飞机游戏思路复习
  12. 按键精灵定位坐标循环_[按键精灵手机版教程]DNF遍历背包卖物
  13. PRINCE2 项目管理方法论框架介绍
  14. ZooKeeper典型应用场景
  15. win7设置自动开机时间_使计算机自动开机
  16. c语言rank函数使用实例,rank函数实例(1)
  17. Tableau实战 网站客户细分仪表盘
  18. MINE:Mutual Information Neural Estimation
  19. 注册oracle驱动,[XXX] 注册了JDBC驱动程 序 [oracle.jdbc.OracleDriver]
  20. 无人机寻迹要两个单片机吗_基于OpenMV的循迹无人机设计

热门文章

  1. python全栈_010_Python3基本数据类型--元组
  2. Logstash配置方法
  3. linux7 yum安装Mysql5.7
  4. 超微 X9DRL-iF 服务器主板简介 BIOS相关图解
  5. fedora与win双系统 设置win为默认启动
  6. JavaScript数组系列函数之push与pop函数用法
  7. 震惊!人工智能已经发展到这个地步了
  8. ZooKeeper 到底解决了什么问题?
  9. 毕业了5年的同学突然告诉我,他已经是架构师了!
  10. 吃透这套架构演化图,从零搭建Web网站也不难!