問題 i: 【排序】找中間數
題目:
輸出一組資料的中位數,輸入的資料ai(10-20
20)注意:
1)直接sort是不行的:因為浮點數的大小判斷是有誤差的,而sort裡面是直接用a>b這種模式來判斷的
2)所以自己寫乙個sort的排序判斷(小技巧)
bool cmp
(double a,
double b)
問題 u: 【排序】奶牛的編號
題目:
有n(1≤n≤1000)頭奶牛,它們都被標上乙個優先等級編號:1,2或3。用來表示它們喝水時的優先次序,編號為l的最優先,編號為2的其次,編號為3的最後。每天奶牛開始時排成一行,但總是很亂,需要你把它們重新排成編號為1的奶牛在最前面,編號為2的其次,編號為3的奶牛在最後。你能計算出最少需要多少的交換次序來完成這次重排嗎?
思路:
1)先算出三個區域的區間範圍,然後先後掃瞄1,2所在的區間[p,q],[q+1,r]
2)以1的區間[p,q]為例,若a[i]==2不為1,就去[q+1,r]裡面找是否有等於1的,有:交換,ans++,無:去[r+1,n]找,然後交換
若a[i]==3則去[r+1,n]中找是否有等於1的,有:交換,ans++,無:去[p+1,q]找,然後交換
#include
#include
using namespace std;
intmain()
int ans=0;
for(
int i=
0;iif(
!flag)}}
}if(a[i]==3
)}if(
!flag)}}
}}}for
(int i=sign1;i}}
cout << ans << endl;
}return0;
}
問題 l: 【排序】水王爭霸
注意:
1)本題系統的sort出問題了,自己寫的bubbl sort
2)字串可能有前導的0,要考慮這一點
問題 s: 【排序】集合
題目:
給定兩個集合a、b,集合內的任一元素x滿足1≤x≤109,並且每個集合的元素個數不大於105。我們希望求出a、b之間的關係。
給定兩個集合的描述,判斷它們滿足下列關係的哪一種:
a是b的乙個真子集,輸出「a is a proper subset of b」;
b是a的乙個真子集,輸出「b is a proper subset of a」;
a和b是同乙個集合,輸出"a equals b」;
a和b的交集為空,輸出"a and b are disjoint」;
上述情況都不是,輸出「i』m confused!」。
思路:
排序,二分
問題 r: 【排序】琦琦的藝術**
題目:
琦琦是乙個漂亮的小女孩,。很多人都說她像洋娃娃。有一天,她還把自己的藝術照拿回幼兒園向小朋友炫耀,也許是因為琦琦的藝術照太漂亮,很多小朋友都找她要藝術**,那些**可是非常珍貴的,她到底應該把**給誰呢?
一共有n個人(以1~n編號)向琦琦要**.而琦琦只能把**給其中的k個人。琦琦按照與他們的關係好壞程度給每個人賦予了乙個初始權值w[i]。然後將初始權值從大到小進行排序,每人就有了乙個序號d[i](取值同樣是1~n)。按照這個序號對10取模的值將這些人分為10類。也就是說定義每個人的類別序號c[i]的值為(d[i]-1)mod 10+1,顯然類別序號的取值為l~10。第i類的人將會額外得到e[i]的權值。你需要做的就是求出加上額外權值以後,最終的權值最大的k個人,並輸出他們的編號。權值都是正整數。在排序中,如果兩人的w[i]相同,編號小的優先。
輸入共3行:
第1行輸出用空格隔開的兩個整數,分別是n (o問題 t: 【排序】誰會贏?
時間限制: 3 sec 記憶體限制: 64 mb
題目:
最近,在課餘時間流行一種遊戲,遊戲的規則如下:遊戲開始時,每個人都從規定範圍內的數中選取乙個數(保證所選取的數各不相同),寫在紙上,握在手中(以防讓別的同學看見),然後同時開啟,如果其中乙個同學手中的數是其他任意兩位同學手中的數之和,那麼他就贏,如果滿足條件的有多個,手中的數最大的那位同學贏。這是心理和智力的雙重考驗,所以參加的學生越來越多,但是,由於參與人數眾多,要判斷誰贏就成了問題,請聰明的你設計乙個程式來解決這個問題!
輸入第1行為乙個整數n(3≤n≤50000),表示參加遊戲的總人數,第2行為n個數(範圍在0~2^31之間),依次表示n個同學所選的數,第i個數表示第i位同學所選的數。
輸出只一行,為乙個整數,表示哪位同學贏。如果沒有任何一位同學贏,則輸出「0」。
思路:
一開使用map將所有情況存下來,再查詢會爆記憶體;後來遍歷出所有情況(不存)然後在給出的數裡面二分,超時(~ _ ~)
後來使用map記錄下所有的出現的數,然後兩個for,求出兩個數w[i],w[j]的差x看看map[x]是否為1還有以下幾個判斷條件,是就輸出
注意:
輸出的條件還有 m[w1-w2]==1 && w1 != w2 * 2 && w2 != 0,w1不能是w2的兩倍,w2不能為0
#include
#include
#include
#include
#include
#include
using namespace std;
const
int maxn=
5e5+5;
struct node
w[maxn]
;bool cmp
(node a,node b)
map<
int,
int>m;
intmain()
}}cout<<
0
}
排序演算法總結
1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...
排序演算法總結
1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...
排序演算法總結
學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...