码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 5744 - Keep On Movin

时间:2016-08-11 22:40:57      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

题意:

  给你不同的字符每个 ai 个,让你构造一些回文串,问你能达到这些回文串长度的最小值的最大值是多少

 

分析:

  要么直接组成单链.

  要么按落单的字符的数目将成对字符分摊取最短.

 

 1 #include <iostream>
 2 #include <cstdio> 
 3 using namespace std;
 4 int main()
 5 {
 6     int t, n;
 7     scanf("%d", &t);
 8     while(t--)
 9     {
10         long long one = 0, two = 0;
11         scanf("%d", &n);
12         for (int i = 1; i <= n; i++)
13         {
14             int x;
15             scanf("%d", &x);
16             if (x % 2) one++, x--; //单个的个数 
17             two += x / 2;    //成对的个数
18         }
19         if (one <= 1) printf("%d\n", two * 2 + one); //可直接组成单链 
20         else printf("%lld\n", two / one * 2 + 1); //单个的数目即链的数目 
21     }
22 }

 

HDU 5744 - Keep On Movin

标签:

原文地址:http://www.cnblogs.com/nicetomeetu/p/5762642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!