hdu5744 多校2.11

来源:互联网 发布:java培训班哪个好 编辑:程序博客网 时间:2024/05/17 13:39

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5744


题目大意:给你每个字母的数量,问能组成的回文串的集合里面最短的长度最长是多少。


思路:统计奇数个数,将其变为1,累加所有的数量,将累加和平均分配给奇数个数。。。


#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <stack>#include <queue>#include <algorithm>#include <vector>#include <map>#include <set>#include <stdlib.h>#include <iomanip>using namespace std;#pragma comment(linker, "/STACK:102400000,102400000")#define maxn 100005#define MOD 1000000007#define mem(a , b) memset(a , b , sizeof(a))#define LL long long#define ULL unsigned long long#define FOR(i , n) for(int i = 1 ;  i<= n ; i ++)typedef pair<int , int> pii;//priority_queue<int , vector<int> , greater<int> > Q;int t ,  n , q;int a[maxn] , b[maxn];int main(){    scanf("%d" , &t);    while(t--)    {        scanf("%d" , &n);        int id1 = 0 , id2 = 0 , tmp;        int sum1 = 0 , sum2 = 0;        for(int i = 1 ; i <= n ; i ++)        {            scanf("%d" , &tmp);            if(tmp%2) sum1 ++ , sum2 --;            sum2 += tmp;        }        if(sum1) tmp = sum2 / sum1;        else tmp = sum2;        if(tmp % 2 && sum1) tmp --;        if(sum1) tmp += 1;        printf("%d\n" ,  tmp);    }    return 0;}


0 0
原创粉丝点击