http://acm.hdu.edu.cn/showproblem.php?pid=6586

将26个字母各自放入队列中,并记下每个位置各字母的后缀和。往k个位置贪心的放字母,先从a开始尝试。首先字母的数量不能大于最大限制,然后位置要大于上一个放的字母。要放这个字母还要满足两个条件。

1.对于26个字母,其后的个数加上当前选的个数要小于l[i]。

2.对于26个字母,把其后的个数取最小之后的和不能大于k,把其后的个数取最大之后的和不能小于k。

#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<cstdio>
#include<stack>
#include<cmath>
#include<iostream>
#include<set>
#define ll long long
#define lowbit(x) x&(-x)
using namespace std;
const int MAX = ;
int l[MAX],r[MAX],num[MAX];
int sum[][MAX];
char s[],ans[];
int len,k;
void init()
{
for (int i = ; i < ;i++)
{
sum[len+][i]=;
num[i]=;
}
}
int main()
{
while(~scanf("%s%d",s+,&k))
{
queue<int> q[];
len=strlen(s+);
init();
for (int i = ; i < ;i++)
scanf("%d %d",&l[i],&r[i]);
for (int i = ; i <= len;i++)
q[s[i]-'a'].push(i);
for (int i = len; i >= ;i--)
{
for (int j = ; j < ;j++)
{
sum[i][j]=sum[i+][j]+(s[i]==('a'+j));
}
}
int now=;
bool flag=false;
int cntt=;
for (int i = ; i <= k;i++)
{
for (int j = ; j < ;j++)
{
if(num[j]==r[j])
continue;
while(!q[j].empty()&&now>=q[j].front()) q[j].pop();
if(!q[j].empty())
{
bool f=false;
int cnt=q[j].front();
num[j]++;
for (int ii = ; ii < ;ii++)
{
if(num[ii]+sum[cnt+][ii]<l[ii]){
num[j]--;
f=true;
break;
}
}
if(f) continue;
int minn,maxx;
minn=maxx=;
for (int ii = ; ii < ;ii++)
{
minn+=max(l[ii]-num[ii],);
maxx+=min(r[ii]-num[ii],sum[cnt+][ii]);
}
if(minn+i<=k&&maxx+i>=k)
{
ans[cntt++]=('a'+j);
now=q[j].front();
break;
}
else
num[j]--;
}
}
if(cntt!=i)
break;
}
if(cntt==k)
{
ans[k]='\0';
printf("%s\n",ans);
}
else
printf("-1\n");
}
return ;
}

(贪心+队列)String的更多相关文章

  1. [Swust OJ 352]--合并果子(贪心+队列模拟)

    题目链接:http://acm.swust.edu.cn/problem/352/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  2. TTTTTTTTTTTTTT CF 95 B 构造4,7幸运数字 贪心 构造 string

    B. Lucky Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  3. 51nod 1672 贪心/队列

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1672 1672 区间交 基准时间限制:1 秒 空间限制:131072 K ...

  4. Codeforces 1500D - Tiles for Bathroom(贪心+队列)

    Codeforces 题面传送门 & 洛谷题面传送门 首先先讲一发我的 \(n^2q\log n\) 的做法,虽然没有付诸实现并且我也深知它常数巨大过不去,但是我还是决定讲一讲(大雾 考虑设 ...

  5. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  6. 总结消息队列RabbitMQ的基本用法

    一.RabbitMQ是什么? AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组 ...

  7. 分布式日志2 用redis的队列写日志

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  8. RabbitMQ队列

    AMQP ,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦,消息的发送者无 ...

  9. [转载] 基于Redis实现分布式消息队列

    转载自http://www.linuxidc.com/Linux/2015-05/117661.htm 1.为什么需要消息队列?当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消 ...

随机推荐

  1. 洛谷 P1484 种树(优先队列,贪心,链表)

    传送门 解题思路 第一眼的贪心策略:每次都选最大的. 但是——不正确! 因为选了第i个树,第i-1和i-1棵树就不能选了.所以,要有一个反悔操作. 选了第i个后,我们就把a[i]的值更新为a[l[i] ...

  2. Nginx工作机制

    Nginx分为单工作进程和多工作进程两种模式.通常采用1个master+多个worker进程配合异步非阻塞的工作机制.master进程主要负责管理自身和下属的worker进程,worker负责处理请求 ...

  3. pistat 查看进程状态

    该pidstat命令用于监视当前正在由Linux内核管理的各个任务.对于使用选项-p选择的每个任务,或者如果使用了选项-p ALL,则它将写入Linux内核管理的 每个任务的标准输出活动.不选择任何任 ...

  4. selenium 教程

    selenium 本身是一套web自动化测试工具,但其经常被用于爬虫,解决一些复杂爬虫的问题. selenium 用于爬虫时,相当于模拟人操作浏览器. 浏览器驱动 使用 selenium 需要先安装 ...

  5. c# WPF SVG 文件的引用(SharpVectors)

    原文:c# WPF SVG 文件的引用(SharpVectors) 阿里巴巴矢量图标库提供了大量的 SVG 图标:https://www.iconfont.cn/ 但是 WPF 本身不支持 SVG 格 ...

  6. JS事件流、事件监听、事件对象、事件委托

    JS事件流: 01.DOM级别和DOM事件 02.JS事件流:页面中接收事件的顺序 事件冒泡阶段-->处于目标阶段-->事件捕获阶段 (事件捕获总发生在事件冒泡前面) 03.捕获:从外向里 ...

  7. html常用标签、包含关系、常用术语,以及网页设计中的字体分类

    编程比较舒适的等宽字体:DejaVu Sans Mono 字体的分类: serif (衬线字体){在笔画上面有些特殊的修饰效果} sans-serif (非衬线字体){横平竖直.横就是横,点就是点} ...

  8. 34. Find First and Last Position of Element in Sorted Array (JAVA)

    Given an array of integers nums sorted in ascending order, find the starting and ending position of ...

  9. mirror - 映射在远端节点上的档案

    总览 SYNOPSIS mirror [flags] -gsite:pathname mirror [flags] [package-files] 描述 DESCRIPTION Mirror 是以 P ...

  10. Navicat连接阿里云服务器MSQL数据库

    新买了台服务器Navicat老是连接不上数据库,查找一圈找到解决办法.So Easy 一.shell远程登录,进入数据库 mysql -uroot -p 二.输入以下命令进行授权: GRANT ALL ...