string中尋找子串、替換字串
string字串判斷是否被訪問過
部分揹包問題通式
區間貪心
哈夫曼樹
將char字元變成int
向下取整和向上取整
當使用二維陣列超時的時候,可以使用二維map
lower_bound( )和upper_bound( )
set:: iterator tp;
遇到有關圖的題時,鄰接表還是鄰接矩陣
二維陣列或者vector可以單獨對第二維進行sort排序
當re的時候,不妨再擴大一下maxn的值
當只用dfs一次,只需要得到乙個方案時
加快for迴圈速度
exit(0)
不要題中n給多大,maxn就設定多大
記憶化搜尋
fill初始化二維陣列(非-1/0)
當遇到輸入為「-100 blabla bla」 【兩個char】
int的取值範圍為: -231——231-1,即-2147483648——2147483647,如果題目中輸入的整數不超過1,000,000,000都可以使用int型變數。
當題目中要求,輸入為多組測試資料,每行一組時,使用:
int
main()
return0;
}
需要加上str.c_str()
int
main()
使用::toupper
轉大寫,使用tolower
轉小寫
int
main()
當遇到相同資料都按先錄入排列在前的規則處理時,排序不能使用sort(),只能使用stable_sort()。
如果查詢不到子串會返回string::npos。
map.find(key)可以查詢map中的鍵key對應的對映的迭代器。
queue通過不斷迴圈來pop()
while
(!q.
empty()
) q.
pop(
);
string s;
while
(getline
(cin,s)
)
使用getline(cin,s)來輸入一行中間還有空格的字串
不然cin>>s 會以空格隔開輸入
%-5d
-
——左對齊
memset(g,-1/0,sizeof(g);
如果求方案數,使用dfs,不能用bfs。
如果求步數,可以使用bfs。
int
dfs(
int t)
else}}
}
void
bfs(
int start)
}
str.find(substr)!=string::npos
此時可以在str中找到substr子串
str.replace(pos,len,str2)
把str從pos號位開始,長度為len的子串替換為str2.
使用set< string > vis;
如果vis.count(str) == 0
則說明沒有出現過str子串,否則就是重複的,之後再把str放入set:vis.insert(str)
因為set集合中元素不會重複
注意這類問題的通式:
先宣告乙個結構體來存重量,價值和單位價值。
讀入資料後,計算每類物品的單位價值,然後按單位價值從高到低排序
之後迴圈所有物品,每次選擇單價最高的物品,如果重量<=揹包:將該物品所有全部裝入;如果重量》揹包,將單價*揹包容量的裝入。
排序cmp規則:
比較左端點座標不同,則大的在前;相同,則按右端點小的在前
bool
cmp(contest x, contest y)
使用優先佇列來存放結點,因為優先佇列可以保持時刻佇列中都是有序的。
//設定優先順序佇列,值越小優先順序越高
priority_queue<
int,vector<
int>
,greater<
int>
> q;
//存放果子
string s;
int a;
a[i]
= s[i]
-'0'
;
floor(double x); ——向下取整
ceil(double x); ——向上取整
使用floor函式。floor(x)返回的是小於或等於x的最大整數。
如:floor(10.5) == 10 floor(-10.5) == -11
使用ceil函式。ceil(x)返回的是大於x的最小整數。
如:ceil(10.5) == 11 ceil(-10.5) ==-10
map> mmap;
lower_bound( begin,end,num):從陣列的begin位置到end-1位置二分查詢第乙個大於或等於num的數字,找到返回該數字的位址,不存在則返回end。通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。
upper_bound( begin,end,num):從陣列的begin位置到end-1位置二分查詢第乙個大於num的數字,找到返回該數字的位址,不存在則返回end。通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。
*tp可以取tp迭代器所指的值
當題目中提到頂點的個數為105 數量級時,此時使用鄰接矩陣(g[maxn][maxn])存圖明顯會超時,所以應該用鄰接表存圖(vector< node > adj[maxn])
for
(int i=
1;i<=n;i++
)
使用乙個flag標誌位,在遞迴邊界裡將flag置為true,同時在dfs函式開頭要加上判斷flag的語句,這樣才不會導致回溯時把原方案覆蓋。
void
dfs(
int last,
int step)
return;}
········
}
把後面的i++,變為++i,此時對迴圈並沒有影響,同時加快了速度
可以在子函式中使用exit(0);
來使呼叫子函式時,結束時直接退出,而不是再次執行下面的主函式程式。
這樣有時候會出現re或者tle
當n<105,不妨設定maxn=1000010
記憶化搜尋,用來減少搜尋次數,防止超時
每次搜尋記錄下來已經已經搜尋過的點的值,下次搜到這個點,直接用已經求過的值即可。
用s陣列存放記憶
int
dfs(
int x,
int y)
fill(dp[0],dp[0]+maxn*maxn,inf);
在使用scanf("%s",a)
讀取第乙個字串的時候,要先使用getchar()
吸收空格,然後再使用gets(b)
讀取第二個帶空格的字串
當帶空格的字串無法使用gets時,可以使用cin.getline(str,length)
來讀入
C 刷題知識點總結1
1.表示式1 4 2.75的值是3。請問這個說法是正確的嗎?沒有說明型別,假如是整型,則答案為2.若是浮點型,答案為3 2.strlen 計算字元陣列的字元數,以 0 為結束判斷,不計算為 0 的陣列元素。而sizeof計算資料 包括陣列 變數 型別 結構體等 所佔記憶體空間,用位元組數表示。3.不...
C 刷題知識點總結3
int p 10 p是乙個陣列 含10個int元素 int p 10 p是乙個指標 指向乙個有10個int的陣列 2.c primer 中文版p187 190關於引數傳遞,指出只有傳值和傳引用 傳指標包含在傳值裡 一般來說,c裡面有兩種傳遞 1 值傳遞 2 指標傳遞 嚴格來看,只有一種傳遞,值傳遞,...
刷題知識點
加速輸入輸出流,放到 頭部 static const auto speedup 陣列初始化容器 int a vector b begin a end a map操作 include include using namespace std int main void else 刪除 iterator ...