SPOJ:PATHETIC STRINGS(分配问题&贪心)
Problem statement:
A string is said to be “PATHETIC” if all the characters in it are repeated the same number of times. You are given a string of length n, what is the minimum number of changes required to make a string “PATHETIC”. The string has only lower case letters and you can change any letter to any other letter.
Input Format
The first line contains an integer T, the number of test cases. This is followed by T test cases each containing 1 line:
Each testcase consists of a string composed of lowercase letters.
Output Format
For each testcase, print in a new line the minimum number of changes required.
Constraints
1 ≤ T ≤ 1370
1 ≤ n ≤ 1991
Sample Input :
2
bbaccaaa
ccaacb
Output:
2
1
题意:给定字符串,问这样才能让字符串里的每个字符的次数相同,每次可以把任意的字符变成任意的字符,求最小操作次数。
思路:把字符想成箱子,那么最多有26个箱子,枚举箱子数X,然后不难知道相应的变化数,更新最小值:
当前箱子大于X,那么从大到小排序,把X后面的几个箱子的货物搬出来,如果前面X个箱子的物体大于N/X,那么多的要搬出来。然后把搬出来的转移到前面X个里面小于N/X的地方。
当前箱子小于等于X,那么大的搬出来给小的。
#include<cmath>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int num[];
char c[];
bool cmp(int a,int b){
return a>b;
}
int main()
{
int T,L,i,j,ans,tot;
scanf("%d",&T);
while(T--){
scanf("%s",c+);
L=strlen(c+); ans=L-;
for(i=;i<=;i++) num[i]=;
for(i=;i<=L;i++) num[c[i]-'a'+]++;
sort(num+,num++,cmp);
for(tot=;tot<=;tot++) if(num[tot]==) break; tot--;
for(i=;i<=;i++){
if(L%i==){
int tmp=;
if(tot>i){
for(j=;j<=i;j++) if(num[j]>L/i) tmp+=num[j]-L/i;
for(j=tot;j>i;j--) tmp+=num[j];
}
else{
for(j=;j<=tot;j++) if(num[j]>L/i) tmp+=num[j]-L/i;
}
if(tmp<ans) ans=tmp;
}
}
printf("%d\n",ans);
}
return ;
}
SPOJ:PATHETIC STRINGS(分配问题&贪心)的更多相关文章
- SPOJ:Elegant Permuted Sum(贪心)
Special Thanks: Jane Alam Jan*At moment in University of Texas at San Antonio - USA You will be give ...
- Codeforce-Ozon Tech Challenge 2020-B. Kuroni and Simple Strings(贪心)
B. Kuroni and Simple Strings time limit per test1 second memory limit per test256 megabytes inputsta ...
- SPOJ:The Next Palindrome(贪心&思维)
A positive integer is called a palindrome if its representation in the decimal system is the same wh ...
- 【SPOJ】MGLAR10 - Growing Strings
Gene and Gina have a particular kind of farm. Instead of growing animals and vegetables, as it is us ...
- Educational Codeforces Round 12 C. Simple Strings 贪心
C. Simple Strings 题目连接: http://www.codeforces.com/contest/665/problem/C Description zscoder loves si ...
- CF447B DZY Loves Strings 贪心
DZY loves collecting special strings which only contain lowercase letters. For each lowercase letter ...
- SPOJ 7758. Growing Strings AC自动机DP
Growing Strings 题目:给出n个字符串,问最多能够选出多少个串组成序列,并满足前一个字符串是后一个字符串的子串. 分析: AC自动机经典水题... 考虑每个节点结尾时,他能够选出最多的串 ...
- 贪心:SPOJ Backup Files
BACKUP - Backup Files no tags You run an IT company that backs up computer data for large offices. ...
- 【贪心/Trie】【CF1083B】 The Fair Nut and Strings
Description 有 \(k\) 个长度为 \(n\) 的只含 \(a\) 或 \(b\) 字符串,并不知道它们具体是多少,只知道它们的字典序不小于字符串 \(A\),同时不大于字符串 \(B\ ...
随机推荐
- codevs科技庄园
/* 因为每一秒只能走一个单位长度,而每走一个单位长度又会消耗一个体力值,如果体力值没有了时间还有也只能按照体力值计算,反之一样,所以V对于时间和体力值取小 cnt记录有桃子的树的个数,node[cn ...
- php 求素数的二种方法
<?php for($i = 2;$i <= 100;$i++) { for($j = 2; $j <= ($r = $i / $j); $j++) { if(($i % $j)== ...
- python内存泄露诊断过程记录pyrasite
工具:pyrasite;包含三个命令行 pyrasite / pyrasite-shell / pyrasite-memory-viewer 安装:gdb meliae urwid 说明:Pyrasi ...
- 数据库系统学习(八)-SQL语言与数据库完整性和安全性
第八讲 SQL语言与数据库完整性 重难点 数据库完整性的概念 关系数据库 防止和避免数据库中不合理数据的出现 输入错误,操作失误,程序处理错误等 完整性约束条件的一般形式 对O操作集合,当出现A情况时 ...
- 用rsync命令删除大文件夹
删除大文件夹 rsync 命令做同步文件用的命令 我们可以借助其快速的运行 来对大文件夹删除:原来就是 新建一个空文件夹 然后把这个空文件夹同步到一个大文件夹下面: 这样会删除大文件夹下面的内容 是高 ...
- vmware下安装mac os虚拟机问题,最后还是最终攻克了被一个小失误给陷害了
今天决定来体验一下苹果系统.虚拟机文件大概用了一天半时间才下载完毕,解压后是39G大小,赶紧安装VMWARE.然后载入虚拟机文件体验.開始当我苹果标志出来的时候,我以为成功了.但是那个小齿轮一直在转, ...
- 用JAVA编写浏览器内核之实现javascript的document对象与内置方法
原创文章.转载请注明. 阅读本文之前,您须要对浏览器怎样载入javascript有一定了解. 当然,对java与javascript本身也须要了解. 本文首先介绍浏览器载入并执行javascript的 ...
- Filter注入对象
由于没有在web.xml文件中加上<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter ...
- (转载)js(jquery)的on绑定点击事件执行两次的解决办法
js(jquery)的on绑定点击事件执行两次的解决办法—不是事件绑定而是事件冒泡 遇到的问题:jquery中用.on()给页面中新加的元素添加点击事件时,点击事件源,绑定的事件执行两次,这里的ale ...
- Apache Qpid CPP的编译与安装
单机Broker部署(windows/linux) 在Windows/Linux上部署QPID Broker的方法. Windows 需要预先准备的文件和程序 qpid-cpp-0.32.tar.gz ...