Keep On Movin

Posted 给杰瑞一块奶酪~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keep On Movin相关的知识,希望对你有一定的参考价值。

上回书说道不愿透露姓名的巨巨还剩下一个数组,这个数组记录了他学习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 = 0,sum = 0;
        cin>>n;
        for(int i = 0;i < n;i ++)
        {
            cin>>a;
            if(a%2)o++;
            sum += a;
        }
        if(o)
        {
            sum /= o;
            if(sum && sum % 2 == 0)sum --;//如果存在奇数个数的字符,那么形成的回文串大小一定也是奇数。
        }
        cout<<sum<<endl;
    }
}

 

以上是关于Keep On Movin的主要内容,如果未能解决你的问题,请参考以下文章

[HDOJ5744]Keep On Movin(水题)

java Android休眠FLAG_KEEP_SCREEN_ON

极米movin01x和z6x的区别哪个好

《Keep your Eyes on the Lane:Real-time Attention-guided Lane Detection》

Andorid 中文API:Keep the CPU On

(HDU)1037 --Keep on Truckin'(待在卡丁车上)