暑期個人賽 第五場 C

2021-06-22 21:59:43 字數 1200 閱讀 2240

時間限制 1000 ms

記憶體限制 65536 kb

給定乙個字串,求它的乙個重排,使得沒有兩個相鄰字元相同。

第一行乙個整數t,表示組數(t<10)。接下來的t行,每行乙個字串s,s中只包含小寫字母,s的長度不大於1e5.

若符合條件的重排存在,輸出字典序最小的乙個。

若不存在,輸出-1。

2

aabbccdd

aaaaabcd

ababcdcd

-1

賽中提交:null

賽後ac:yes

題目大意:

給乙個字串,要求輸出不存在相同相鄰字元的排序。若不存在就輸出-1;

反省:這是一道貪心題

分為三種情況,

(1)若出現了,字母總數是奇數,且某乙個字母的個數等於奇數加一的二分之一,則必須直接先安排這個字母

(2)接著觀察是否有字母大於了字母總數加一的一半(注意這個運算,結果總是取得奇數加一的二分之一),如果有就可以終止查詢了

(3)如果上面兩種情況都不符合,那麼就直接找乙個「與前乙個字母不同,但是字典序又是最小的字母」

下面是ac**

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define maxn 500005

using namespace std;

int len;

int main()

,res[100006]=;

int num[28]=,flag=0;

scanf("%s",c);

len=strlen(c);

for(int i=0;i(tmplen+1)/2)

else if(i==0)

else

j+=1;

}//printf("%d eat**** %c %c\n",i,j-1+'a',res[i-1]);

res[i]=j-1+'a';

num[j]-=1;}}

if(flag)

else

}return 0;

}

暑期個人賽 第五場 D

時間限制 1000 ms 記憶體限制 65536 kb 已知函式f,f 0 f 1 1,對於所有n 2,f n f n 1 f n 2 n。給定n,求f n 第一行乙個整數t,表示組數,t 1000。之後t行每行乙個整數n,0 n 1e9。對於每組測試組,輸出一行f n 1000000007.612...

暑期個人賽 第五場 E(待A)

時間限制 1000 ms 記憶體限制 65536 kb 鬥地主玩法簡單,娛樂性強,老少皆宜。據傳在萬惡的舊社會,地主橫行鄉里,無惡不做,人們為了發洩對地主的痛恨,常常在一天的勞作之後,一家人關起門來 鬥地主 該遊戲由三人玩一副牌,地主為一方,其餘兩家為另一方,雙方對戰,先出完手中牌的一方勝。機智的學...

暑期個人賽 第二場 C

時間限制 1000 ms 記憶體限制 65536 kb 現有一段橫向長度為n的山脈,其中每段有乙個獨一無二的高度hi 1到n之間的正整數 現在你想知道對於長度為n的山脈,可能有這樣的山脈多少種。這樣的山脈是 某個位置要麼比兩邊的高度都低,要麼比兩邊的高度都高。兩座山脈 a和 b 不同當且僅當存在乙個...