時間限制 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 不同當且僅當存在乙個...