zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    jedata日期控件的开始结束日期设置
    springMVC中对HTTP请求form data和request payload两种数据发送块的后台接收方式
    Java Code Examples for org.codehaus.jackson.map.DeserializationConfig 配置
    Struts 2与AJAX(第二部分)
    在Struts 2中实现文件上传
    Strus 2的新表单标志的使用
    在Struts 2中实现CRUD
    Struts 2与AJAX(第三部分)
    Struts 2中的OGNL
    GridView中实现自定义时间货币等字符串格式
  • 原文地址:https://www.cnblogs.com/8023spz/p/7786860.html
Copyright © 2011-2022 走看看