題目描述
小x最近拿到了一堆的字元,一共n種,第i種字元有ai個。
現在小x準備用這些字元來拼若干個回⽂串(至少乙個),並且想使最短的回文串長度盡可能大,為了方便,你只要告訴他答案就可以了。
輸入
第一行乙個正整數t,表示資料組數。
接下來每組資料第一行為乙個正整數n,表示小x拿到的字元種類數,
接下來n個整數a1到an,分別表示第1到第n種字元的數量。
輸出
對每組資料,輸出一行乙個整數,表示最大的最短回文串長度。
樣例輸入 copy54
2 3 2 2
41 1 2 4
32 2 2
51 1 1 1 1
51 1 2 2 3
樣例輸出 copy93
613提示
對於100%的資料,t≤10,1≤n≤105,1≤ai≤10000。
解析:對於奇數個的,我們肯定要單獨拿出來放到中間,剩下的放到兩側。如果全都是偶數那就是這些的和。如果既有奇數又有偶數的話,我們需要給奇數分配多少對偶數放到兩側。公式:(偶數的對數/奇數的個數)/2+1;
#include.h>
using namespace std;
const int n
=1e5
+100
;typedef long long ll;
int a[n]
;int main()
if(l==
0&&r==
0) cout<<
1
if(l!=
0&&r==
0) cout<<
2*l
}return0;
}
回文串問題
乙個字串,如果從左到右讀和從右到左讀是完全一樣的,比如 aba 我們稱其為回文串。現在給你乙個字串,可在任意位置新增字元,求最少新增幾個字元,才能使其變成乙個回文串。輸入格式 任意給定的乙個字串,其長度不超過1000.輸出格式 能變成回文串所需新增的最少字元數。輸入樣例 在這裡給出一組輸入。例如 a...
回文串問題
1.回文串的判斷 include include using namespace std 回文串的判斷 bool ispalindrome const char src return true intmain 2.最長回文子串 中心擴充套件就是把給定的字串的每乙個字母當做中心,向兩邊擴充套件,這樣來...
b wy 小易唉回文(思維)
小易可以在字串尾部加入任意數量的任意字元,使其字串變成回文串。現在請你編寫乙個程式,程式要能計算出小易可以得到的最短回文串。思路 問題一定存在解,因為大不了將整個字串反轉再拼接,而noo,這種中間有重複字元的字串,我們只需反轉一下,然後不斷擷取子串拼接即可 def chk s i,j 0,len s...