Phoenix and Distribution(字典序贪心)
\(给定一串字母,分成k份,使得最大字典序最小。(字母可以任意组合)\)
\(------------------------------issue~------------------------\)
\(首先肯定先对字母排序,然后往k个盒子都丢一个字母(因为不能为空)\)
\(那么接下来,就一定能够要想清楚了......\)
\(\color{Red}Ⅰ.当接下来的字母都相等时,就均分到k个盒子里,因为这时候影响字典序的只是长度\)
\(\color{Purple}{Ⅱ.当接下来的字母不全相等,意味着什么?还能均分吗?}\)
\(问题的关键在于,接下去总会有不相等的字母,每次均分的话迟早轮到某个盒子分到的是较大的字母\)
\(那这样一定不会比我把所有字母接在第一个盒子更优,因为虽然我的长度长,但是相同位置上一定是最小的!!(字母已经排序了)\)
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+9;
char s[maxn];
string a[maxn],maxx;
int t,n,k,y,L;
void work()
{
for(int i=1;i<=k;i++)
a[i]+=s[++y];
}
int main()
{
cin>>t;
while(t--)
{
int flag=0;
for(int i=1;i<=100000;i++) a[i]="";
cin>>n>>k>>(s+1);
sort(s+1,s+1+strlen(s+1));
L=strlen(s+1);
for(int i=1;i<=k;i++)
a[i]+=s[i];//先都分一个字典序最小的
if(a[k]!=a[1]) cout<<a[k];//最大一定是a[k];
else
{
int flag=1;
for(int i=k+2;i<=L;i++) if(s[i]!=s[i-1]) flag=0;
if(flag)//都相等
{
y=k;
while(y<n) work();
cout<<a[1];
}
else//不都相等
{
for(int i=k+1;i<=L;i++) a[1]+=s[i];
cout<<a[1];
}
}
cout<<endl;
}
}
Phoenix and Distribution(字典序贪心)的更多相关文章
- Hdu6586 String 字符串字典序贪心
Hdu6586 字符串字典序贪心 题意 给出一个只包含26个字符的字符串(|S|<=1e5),要求从中取出长度为k的字典序最小的组序列,满足所给的26个字母的限制条件,例如\([l_i,r_i] ...
- Codeforces 798D Mike and distribution(贪心或随机化)
题目链接 Mike and distribution 题目意思很简单,给出$a_{i}$和$b_{i}$,我们需要在这$n$个数中挑选最多$n/2+1$个,使得挑选出来的 $p_{1}$,$p_{2} ...
- codeforces 798 D. Mike and distribution(贪心+思维)
题目链接:http://codeforces.com/contest/798/problem/D 题意:给出两串长度为n的数组a,b,然后要求长度小于等于n/2+1的p数组是的以p为下表a1-ap的和 ...
- bzoj 3671: [Noi2014]随机数生成器【模拟+贪心】
降智好题 前面随机部分按照题意模拟,然后字典序贪心,也就是记录每个值的位置从1~nm依次看能不能取,能取的话更新行的取值范围(它上面的行一定取的列小于等于这个数取的列,下面行大于等于) #includ ...
- Codeforces1348 题解
AC代码连接 A Phoenix and Balance 显而易见,将前\(\frac{n}{2}-1\)个和最后1个分为1组,剩下的1组即为最优方案. B Phoenix and Science 这 ...
- Codeforces Round #638 (Div. 2)
Contest Info Practice Link Solved A B C D E F 4/6 O O Ø Ø O 在比赛中通过 Ø 赛后通过 ! 尝试了但是失败了 - 没有尝试 Sol ...
- COJ883 工艺品
试题描述 LZJ和XJR是一对好朋友. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方块放到最右边. 他们想,在仅这一个操作下,最漂 ...
- hdu1814 Peaceful Commission
hdu1814 Peaceful Commission 题意:2-sat裸题,打印字典序最小的 我写了三个 染色做法,正解 scc做法,不管字典序 scc做法,错误的字典序贪心 #include &l ...
- CSP-S 2019 简要题解
从这里开始 又考炸了,sad.....明年应该在准备高考了,考完把坑填了好了. 一半题都被卡常,qswl.[我汤姆要报警.jpg] dfs 怎么这么慢呀,sad..... i7 牛逼! 写的比较混乱, ...
随机推荐
- 【原创】关于java对象需要重写equals方法,hashcode方法,toString方法 ,compareto()方法的说明
在项目开发中,我们都有这样的经历,就是在新增表时,会相应的增加java类,在java类中都存在常见的几个方法,包括:equals(),hashcode(),toString() ,compareto( ...
- 004-流程控制-C语言笔记
004-流程控制-C语言笔记 学习目标 1.[掌握]关系运算符和关系表达式 2.[掌握]逻辑运算符和逻辑表达式 3.[掌握]运算符的优先级和结合性 4.[掌握]if-else if-else结构的使用 ...
- C#——继承
在某基类中声明 virtual 并在一个或多个派生类中被重新定义的成员函数称为虚函数. 虚函数的作用就是实现多态性(Polymorphism),多态性是将接口与实现进行分离. C#作为完全面向对象语言 ...
- Hadoop权威指南(中文版-带目录索引)pdf电子书
Hadoop权威指南(中文版-带目录索引)pdf电子书下载地址:百度网盘点击下载:链接:https://pan.baidu.com/s/1E-8eLaaqTCkKESNPDqq0jw 提取码:g6 ...
- J - A strange lift
计院有一个bug电梯,可能是hyk造的,很多bug,电梯只有两个按钮,“上”和“下”,电梯每层都可以停,每层都有一个数字Ki(0<=Ki<=n),当你在一层楼,你按“上”键会到1+K1层, ...
- python进入adb shell交互模式
import subprocess #方法一:进入某个环境执行语句(adb shell),注意shell内部命令需要带\n,执行完后一定记得执行exit命令退出,否则会阻塞 obj = subproc ...
- linux 批量删除文件
来源;https://www.cnblogs.com/sinpo/p/7106998.html linux下批量删除文件 1. 在linux批量删除多级目录下同一格式的文件,可采用find + e ...
- Zabbix CPU utilization监控参数
工作中查看Zabbix linux 监控项的时候对linux 监控的cpu使用的各个参数没怎么明白,特意查看了下资料 Zabbix linux模板下的CPU utilization是自带的监控Linu ...
- 增量学习不只有finetune,三星AI提出增量式少样本目标检测算法ONCE | CVPR 2020
论文提出增量式少样本目标检测算法ONCE,与主流的少样本目标检测算法不太一样,目前很多性能高的方法大都基于比对的方式进行有目标的检测,并且需要大量的数据进行模型训练再应用到新类中,要检测所有的类别则需 ...
- hdu_2391 Filthy Rich DP
Filthy Rich Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...