問題 A 小X的回文串 思維

2021-10-02 04:11:01 字數 1000 閱讀 2019

題目描述

小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...