練習03 排序

2021-09-25 07:47:44 字數 2726 閱讀 3270

a題:big number

題意:求階乘n的結果又多少位數。poj的資料比hdu難過點,但是hdu討論版的斯特林公式可以。我也不會證明,只能抄下來了咯。

#include#include#include#include#include#define max 10000005

using namespace std;

int a[max];//zhi

int b[max];//

int ans[max];

int main()

return 0;

}

b:

#include#include#include#include#include#include#include#define max 210

using namespace std;

int node[max][max];

int max;

bool cmp(int a,int b)//xiao

int getmax(int a,int n)//當前的max能不能滿足所有的陣列

else

now_max--;

} return max;

}int fun(int k)//第幾個點,返回這個點的值

for(int i=1;i<=node[k][0];i++)

sort(temp,temp+node[k][0],cmp);//有多少個點

return getmax(temp,node[k][0]);

}int main()

} printf("%d\n",fun(1));

} return 0;

}

c:monkeys' pride

求有多少個點,沒有其他點的x和y同時大於或等於這個點。先把所有點的x排序(x相同y大的大),然後從x最大的點開始往下遍歷,發現乙個y大於當前最大的y(從最大的x的y開始到最小的x),則表示這個點可以,sum++;理由:因為x從大到小遍歷。當前的x比沒有遍歷的點都大,且當前的y比已經遍歷的點的y都大,所以不存在同時大於該點x,y的點。

#include#include#include#include#define max 50050

using namespace std;

struct node a[max];

bool cmp(node a,node b)//大》小

int main()

}printf("%d\n",ans);

} return 0;

}

d:排列

求後面第k個字典序,使用stl的next_permutation水過,,但是注意提交要用c++提交,g++會迷之超時~。

#include#include#include#include#define max 1030

using namespace std;

/*g++會超時,c++不會超時*/

int a[max];

int main()

while(scanf("%s",temp)&&strcmp("******",temp))

while(1)

word=temp;

if(m[word])//有就輸出

}if(!flag)

printf("not a valid word\n");

printf("******\n");

} return 0;

}

h:就是求中位數;k 排序就好了,快排排序然後直接輸出。

i:487-3279

好像可以用字典樹寫,求號碼轉化後有多少個。大於1就直接輸出。我用map水過(提交c++才能過,g++超時,迷*2)

#include#include#include#include#include#include#include#define max 100010

using namespace std;

//先把鍵盤和數字對應儲存下來

char tab=;

mapm;//字典

struct nodeall[max];

bool cmp(node one,node two) //大》小

else

printf("%c-",temp[j]);

}printf(" %d\n",i->second);

} i++;

} if(!flag)

return 0;

}

l - babelfish

這題應該是雜湊函式吧,額,我選擇還是用map寫(內部好像是紅黑樹,效率蠻高的)。

這題應該考手寫雜湊吧,水題。

#include#include#include#include#include#include#includeusing namespace std;

mapm;//使用字典

int main()

a[i]='\0';

scanf("%s",b);

getchar();//吸收回車

ac=a;

wa=b;

m[wa]=ac; //構建字典

} while(scanf("%s",a)!=eof)

{ wa=a;

if(m.find(wa)!=m.end()) //在

{ cout《還有兩題也是水題,就不寫了。

03 排序演算法

直接移動 交換資料位置 邏輯移動 改變指標,更快 jmp len data 2 while jmp 0 插入排序 for i in range jmp,len data tmp data i j i jmp while j 0 and tmp data j data j jmp data j j j...

03 排序 氣泡排序

基本原理 顧名思義就是整個過程向氣泡一樣往上公升,單向氣泡排序的基本原理就是 對於給定的n個資料,從第乙個資料開始一次對相鄰的兩個記錄進行比較,當前面的記錄大於後面的記錄時,交換位置,進行一輪比較和換位後,n個記錄中最大的那個被排在最後,即第n位。然後對前面n 1個記錄進行第二次比較,重複該過程。實...

資料庫 03 排序查詢

高階3 排序查詢 語法 select 查詢列表 from 表 where 篩選條件 order by 排序列表 asc desc 注 1.預設公升序 2.一般放在最後面,limit字句除外 案例1 查詢員工資訊,要求工資從高到低排序 select from employees order by sa...