上回书说道不愿透露姓名的巨巨还剩下一个数组,这个数组记录了他学习c++ 语言的过程。
现在这个数组a里有一些字符,第i个字符的数量是a[i]。巨巨想用这些字符来构造一些回文串好让他的程序通过编译。
他想知道各种组合方案中最短字符串长度的最大值。
 
举个栗子:
现在有 ‘a’, ‘b’, ‘c’, ‘d’ 四种字符并且他们的数量是 {2,3,2,2} 巨巨可以构造出 { “acdbbbdca”}, { “abbba”, “cddc”}, { “aca”, “bbb”, “dcd”},或{ “acdbdca”, “bb”} 四种方案.
在以上方案中,第一个方案的最短字符串长度比其他三种方案中的最短字符串长度都长,为9。
 
回文串嘛,大家都懂的就不废话了。

Input

多组测试数据。第一行一个整形t,代表测试数据的组数。
对于每组测试数据,第一行一个整形n(1<=n<= 105),代表字符的种类数。
接下来一行n个数,a1, a2,...,an(0<=ai<=104);

Output

对于每组测试数据,输出一个代表答案的整数。·

Sample Input

4
4
1 1 2 4
3
2 2 2
5
1 1 1 1 1
5
1 1 2 2 3

Sample Output

3
6
1
3 题目很简单,中文的,好理解,给出一些字符的个数,然后组成不同的回文串组合,一个组合中可以有一个或多个回文串,要把字符全用完,每个回文串组合中找出一个长度最小的,求这些最小长度的最大值。
直接求奇数字符串的的个数,然后把总的字符按这个个数等分,可以求出答案。 代码:
#include <iostream>
#include <string> using namespace std; int main()
{
int a;
int t,n;
cin>>t;
while(t --)
{
int o = ,sum = ;
cin>>n;
for(int i = ;i < n;i ++)
{
cin>>a;
if(a%)o++;
sum += a;
}
if(o)
{
sum /= o;
if(sum && sum % == )sum --;//如果存在奇数个数的字符,那么形成的回文串大小一定也是奇数。
}
cout<<sum<<endl;
}
}

Keep On Movin的更多相关文章

  1. HDU 5744 Keep On Movin

    Keep On Movin Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  2. HDU 5744 Keep On Movin (贪心)

    Keep On Movin 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5744 Description Professor Zhang has k ...

  3. HDU 5744 Keep On Movin 贪心

    Keep On Movin 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5744 Description Professor Zhang has k ...

  4. hdu-5744 Keep On Movin(思维)

    题目链接: Keep On Movin Time Limit: 4000/2000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Oth ...

  5. hdu 5744 Keep On Movin (2016多校第二场)

    Keep On Movin Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  6. 【HDU 5744】Keep On Movin

    找出奇数个的数有几个,就分几组. #include<cstdio> #include<cstring> #include<algorithm> #include&l ...

  7. HDU 5744 Keep On Movin (贪心) 2016杭电多校联合第二场

    题目:传送门. 如果每个字符出现次数都是偶数, 那么答案显然就是所有数的和. 对于奇数部分, 显然需要把其他字符均匀分配给这写奇数字符. 随便计算下就好了. #include <iostream ...

  8. HDU5744:Keep On Movin(字符串)

    题意: 给出t组测试数据,每组给出正整数n表示有n种字符,接下来给出n个数表示该种字符的数目,操作一下,使得可以构造的最小回文串字符数目最大且输出. 分析: 如果每个字符出现次数都是偶数, 那么答案显 ...

  9. HDU5744 Keep On Movin (思维题,水题)

    Problem Description Professor Zhang has kinds of characters and the quantity of the i-th character i ...

  10. Keep On Movin (贪心)

    #include<bits/stdc++.h> using namespace std; int main(){ int T, n, a;scanf("%d",& ...

随机推荐

  1. linux改变apt-get安装源

    最近自己装了个ubuntu kylin 在使用的过程中发现,系统的apt-get 的源有毛病,总是安装不了软件. 感觉应该是传说中的墙的原因,所以准备换到阿里云的源. 下面是步骤: 1.复制原文件备份 ...

  2. 【转】ViewPager 一屏显示多个子页面

    一.概述 项目中遇到一个需求:ViewPager 一屏显示多个子页面.因为之前没有做过这样的界面,所以经历了些许小插曲,特以记之! 主要内容来自: http://blog.csdn.net/JM_be ...

  3. hdu 5187 快速幂 + 快速乘 值得学习

    就是以那个ai为分水岭,左边和右边都分别是单调增或单调减如图         就这四种情况,其中头两种总共就是两个序列,也就是从头到尾递增和从头到尾递减.         后两种方式就是把序列中德数分 ...

  4. Ubuntu安装 Spark2.3.0 报错原因及解决

    Ubuntu 安装Spark出现的问题及解决 最近在搭建Hadoop集群环境和Spark集群环境,出现的问题可能不太复杂,纯粹记录安装步骤和问题解决办法.集群环境使用的是(2台)阿里云主机,操作系统是 ...

  5. Windows10下用Anaconda3安装TensorFlow教程【转】

    本文转载自:https://www.cnblogs.com/HongjianChen/p/8385547.html 1. 安装好Anaconda3版本 (1) 注:可以发现最新版本是Anaconda5 ...

  6. POJ2533_Longest Ordered Subsequence (线性动态规划变形)

    本题求一个字符串中的最长递增子序列的长度. 动态规划方程 a[]记录字符串: d[i]记录以第i个元素为最后一个元素的最长递增序列的长度 则 d[i+1]=1+max(d[j])  其中(j<i ...

  7. POJ 1386 Play on Words(欧拉路)

    http://poj.org/problem?id=1386 题意: 给出多个单词,只有单词首字母与上一个单子的末尾字母相同时可以连接,判断所有字母是否可以全部连接在一起. 思路: 判断是否存在欧拉道 ...

  8. Android -- 在一个Activity开启另一个Activity 并 获取他的返回值。

    1. 视图示例, 按选择弹出 2界面, 选择选项  回显到1    2. 示例代码 MainActivity.java, 第一个activity public class MainActivity e ...

  9. BZOJ 3527 【ZJOI2014】 力

    题目链接:力 听说这道题是\(FFT\)板子题,于是我就来写了…… 首先可以发现这个式子:\[E_i=\sum_{j<i}\frac{q_j}{(i-j)^2}-\sum_{j>i}\fr ...

  10. vue-router详解

    对于单页应用,官方提供了vue-router进行路由跳转的处理,本篇主要也是基于其官方文档写作而成. 安装 基于传统,我更喜欢采用npm包的形式进行安装. npm install vue-router ...