第二題:
傳送門[程式設計題] 困獸之鬥
經過深思熟慮之後,小賤君打算去m國闖一闖,那是乙個古老的東方國度,傳說有很多高階魔法師,他想成為一名偉大的魔法師,將來征服星辰大海。
經過千辛萬苦,小賤君終於來到了m國,不幸的是剛進城門小賤君就被m國的守城士兵困在了一種叫做「困獸之鬥」的陣法之中。
士兵對小賤君說:「看到漂浮在你身邊的寶石了嗎?彩虹連線的兩顆寶石可以任意交換位置,你需要通過一系列交換後使得寶石組成的字串的字典序最小。若不能破陣,那還是請回吧!」
小賤君觀察了一下周圍的寶石,只見每顆寶石上標有乙個小寫字母,而且有一些寶石上通過彩虹與其他寶石相連。
琢磨了半天,他終於搞懂了這個陣法的意思:
若寶石系列為:dcba
其中有兩道彩虹,分別是(0,1),(1,2),代表第乙個位置上的寶石可以和第二個位置上的寶石互換,第二個位置上的寶石可以和第三個位置上的寶石互換,最終可以得到字典序最小的寶石系列:bcda。
作為小賤君的死黨,你有什麼方法幫助他破陣嗎?
輸入描述:
輸入包含多組測試資料。
對於每組測試資料:
字串s --- 代表寶石序列
n --- 代表有n條彩虹
接下來n行,每行兩個數ai,bi --- 表示ai和bi由一條彩虹相連。
保證:1<=s的長度<=10000
1<=n<=10000
且輸入資料均合法。
輸出描述:
對於每組資料,輸出乙個字串
輸入例子:
dcba20 1
1 2hellonowcoder
40 1
1 42 5
2 3
輸出例子:
bcdaehllonowcoder
思路:並查集 + 排序
把能互相連通的字母,進行排序
1 #include2 #include3 #include4 #include5 #include67#define n 1000589
using
namespace
std;
1011
intn;
12char
s[n];
13int
f[n];
14char
ans[n];
15int
l;16
17 vectorv[n];
18 vectorpos[n];
1920
int find(int
x)23
24void merge(int a,int
b)31
32void
ini()
41int
a,b;
42for(i = 1;i <= n;i++)46}
4748
void
solve()
55for(i = 0;i < l;i++)
58for(i = 0;i < l;i++)63}
64 ans[l] = '\0'
;65}66
67int
main()
73return0;
74 }
第三題:
傳送門[程式設計題]絕域之門
經過多次強攻之後,赫柏帶領的軍團不僅沒能擊敗魯卡斯,反而被魯卡斯打得七零八落,赫柏終於體會到了高階天之驅逐者的強大實力。
不過,赫柏最終還是找到了魯卡斯的致命弱點,他發現魯卡斯喜歡收集上古卷軸,因為上古卷軸能夠讓魯卡斯獲得神秘之力。
盧卡斯決定使用上古卷軸將盧卡斯引誘到絕域之門,利用絕域之門的力量消滅盧卡斯。
赫柏注意到盧卡斯喜歡收集不同的卷軸,如果總是撿到相同的上古卷軸,它的興趣就會逐漸降低。
赫柏現在擁有n種不同的卷軸,每種卷軸有ai個。現在他要將這n個卷軸分散在魯卡斯領地到絕域之門的路上,每一種排列方式都有乙個吸引值charm,吸引值越高,魯卡斯被引誘到絕域之門的概率越高。
charm=sum of all d(i),其中d(i)=k-i,i為該排列中卷軸i的下標,k為位於i後面且和i是同一種卷軸的卷軸下標。
現在所有的卷軸以《卷軸名稱 數量》的格式給出,你需要輸出所有卷軸的排列順序,使得吸引值最大,如果有多種排列方式滿足條件,輸出按照名字排列字典序最小的乙個。
輸入描述:
多組測試資料,請處理到檔案結束。對於每組測試資料:
第一行:乙個整數n,代表有n種卷軸。
第二行:n種卷軸的描述。
保證:0<=n<=50;
卷軸名稱為長度1~10的字母,每種卷軸的數量為1~800之間的乙個整數。
輸出描述:
輸出所有卷軸的乙個排列。
輸入例子:
3thunder 1 wind 3 soil 2
輸出例子:
soil wind thunder wind soil wind
題解**:
每種字串的吸引值只與它第一次出現和最後一次出現的位置有關,所以我們可以先把所有字串的首尾出現位置確定,再把其餘的字串塞到中間就行了,安排字串位置時均按照字典序由小到大的順序。
1 #include2 #include3 #include4 #include5 #include6 #include78#define n 55910
using
namespace
std;
1112
struct
ppa[n];
1617
bool
cmp(pp a,pp b)
2021
intn;
22string
ans;
23string
l,r,mid;
2425
void
ini()31}
3233
void
solve()42}
43for(i = 0;i < n;i++)48}
49 ans = l + mid +r;
50if(ans.size() >= 1)53
}5455int
main()
61return0;
62 }
騰訊2017暑期實習生筆試題 有趣數字
這個題意思很簡單吧,給出很多數,找出 二元組 裡面差最小的和差最大的個數 兩個數的差事大的減去小的,也就是絕對值的意思 說實話,這個題的處理確實很難把握。我的解題思路是 先將這個陣列排序,然後就很容易計算出差最大的二元組的個數,接下來就是計算最小二元組的個數。我寫的 會剛開始的時候跳過對開始部分的兩...
2017騰訊校招暑期實習生筆試題3
小q今天在上廁所時想到了這個問題 有n個數,兩兩組成二元組,差最小的有多少對呢?差最大呢?輸入包含多組測試資料。小q今天在上廁所時想到了這個問題 有n個數,兩兩組成二元組,差最小的有多少對呢?差最大呢?輸入描述 輸入包含多組測試資料。對於每組測試資料 n 本組測試資料有n個數 a1,a2 an 需要...
騰訊2017暑期實習生筆試題解題答案彙總
給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數 輸入描述 輸入資料有多組,每組包含乙個字串s,且保證 1 s.length 1000.輸出描述 對於每組資料,輸出乙個整數,代表最少需要刪除的字元個數。輸入例子 abcda goo...