鞏固演算法筆記第四章
2021寒假集訓part 1
2021-01-24 25 26
題單由此進!!!
以下只記錄個人覺得有意思的
1 p1177 【模板】快速排序
#
include
using namespace std;
int n,a[
1000001];
void
qsort
(int l,
int r)
//應用二分思想
}while
(i<=j)
;//這裡注意要有=
if(lqsort
(l,j)
;//遞迴搜尋左半部分
if(iqsort
(i,r)
;//遞迴搜尋右半部分
}int
main()
理解後自己盲打的** 也過oj了
#
include
int a[
10010];
int n;
void
qsort
(int l,
int r)
while
(a[j]
>mid)
if(i<=j)}if
(lif(i}int
main()
qsort(1
,n);
for(
int i=
1;i<=n;i++
)return0;
}
感覺相對於書上的快速排序 如上的快排會快一點 因為他是從兩頭判斷 而傳統的是從一頭判斷 不滿足條件後再互換值 效率明顯低 另外注意遞迴 注意遞迴 注意遞迴 重要的事情說三遍!!!
2 p1012 [noip1998 提高組] 拼數
#
include
#include
#include
#include
using namespace std;
string a[25]
;bool cmp
(string a,string b)
intmain()
sort
(a,a+n,cmp)
;for
(int i=
0;i)return0;
}
此題題意就是把開頭數字大的數字放前面 比如 『12345』 與 『9』 『9』應該放前面 但是對於321 與32
顯然32應該放前面 此時應該想到string 利用string的加法直接可比較 即
bool cmp
(string a,string b)
簡單暴力!
3 p1036 [noip2002 普及組] 選數
#
include
#include
using namespace std;
bool isprime
(int a)
int n,k;
int a[25]
;long
long ans;
void
dfs(
int m,
int sum,
int startx)
for(
int i = startx; i < n; i++
)dfs
(m +
1, sum + a[i]
, i +1)
;//遞迴
//步數要加一,和也要加
//公升序起始值要變成i+1,以免算重
return
;//這乙個步驟下,所有的都列舉完了
//直接返回去
}int
main()
自己再重新敲一遍
#
include
int a[25]
,ans=
0,n,k;
bool isprime
(int x)
for(
int i=
2;i*i<=x;i++)}
return true;
}voids(
int m,
int sum,
int up)
}for
(int i=up;i)return;}
intmain()
s(0,
0,0)
;printf
("%d"
,ans)
;return0;
}
感覺遞迴還是難啊~
4 p1024 [noip2001 提高組] 一元三次方程求解
#
include
double a,b,c,d;
doublef(
double x)
intmain()
if(x1*x2<0)
else
}printf
("%.2f "
,mid)
; s++;}
if(s==3)
}return0;
}
談幾點
函式一定要是double型 自己被坑了深有感觸 不要隨手就int型
類似這種求解題一定要判斷端點 且只判斷左端點或者右端點避免重複
確定精確度的時候可利用 l r 確定 不一定非要用f(x)確定
5 p2043 質因子分解
#
include
int a[
10010];
intmain()
}}for(
int i=
2;i<=n;i++)}
return0;
}
以上暴力寫法 網上看到很多人判斷是否是素數進行處理後再找因子 **冗長 用以上暴力寫法思路明了 但是會做許多無用功 因此可以改進插入對i2是否是素數的判斷以提前跳出迴圈 改進後暴力寫法如下
#
include
int a[
10010];
bool isprime
(int x)
for(
int i=
2;i*i<=x;i++)}
return true;
}int
main()
if(isprime
(i2))}
}for
(int i=
2;i<=n;i++)}
return0;
}
同樣ac
6 cf909a generate login
#
include
#include
intmain()
else
}printf
("%c"
,b[0])
;return0;
}
實現不難 主要學習一下貪心的思路
我們首先先輸出第乙個串的第乙個字元,因為要求非空。 我們注意到無論如何,第二個串只需要乙個字元即可,因為長度短的串字典序小。如果加上第二個字元一定會使字典序更大。
例如:***xp字典序比***x大。無論***x後面加上什麼字元,字典序都比原串大。
然後我們每次判斷,如果第乙個串中的剩餘的當前字元仍然比第二個串的首字元小,那麼總字典序肯定也比直接加上後乙個串的長度小。 當我們發現乙個串中字元字典序\ge≥第二個串的首字元,那麼我們直接輸出第二個串首字元,然後結束程式即可。
7 p1116 車廂重組
兩種思路
第一種思路 即為氣泡排序
#
include
int a[
10010];
intmain()
for(
int i=
1;i<=n-
1;i++)}
}printf
("%d"
,ans)
;return0;
}
第二種思路為迭代
只是迭代去計算每個數字前有幾個數字比它大,這意味著它必須要移動幾次。
#
include
using namespace std;
int n, sum;
intmain()
願每次回憶,對生活都不感到負疚。——郭小川 雅禮集訓 part1
目錄day2 市場實際上算上區間加法增長的部分值域也很低,對於區間整除最多做 log 次。所以直接線段樹暴力維護。記錄 矩陣為什麼我會預設可以用列給行染色啊?只能先搞出一行全黑,然後染完所有列。由於是給列染色,所以對於第 k 行,只要存在某一行的第 k 列是黑,就可以完成補色,且補色的步數一定。對於...
部落格推薦 Part 1
部落格推薦 part 1 博起 了一年多了,寫過一百多篇博文,看過的博文更是不計其數。剛剛看到乙個部落格的文章,實在把我笑到不行。然後就想推薦給大家。繼而就心血來潮,想把自己喜歡的一些部落格陸續的推薦給大家。也許,你也會喜歡呢?說明 仙仙,本名張仙!是湖南的一位autoware兄弟,跟我一起混跡內蒙...
C Handle 控制代碼 part1
本文是我學習c 沉思錄第6章的筆記 本文主要講述了handle類的概念,定義方法以及寫時複製技術。在前文 surrogate 類 的講解中我們了解到了 的實現方法.類有很多好處,但是麻煩的是每次都得進行複製.如果該類是經常使用並且member很多的話,這樣複製的消耗是十分客觀的.因此這裡就要介紹另外...