---
###### tags: `2021 師大附中資訊科暑期培訓`
---
# 各種競賽技巧
2021 師大附中資訊科暑期培訓
joylintp
---
## bits/stdc++.h
```cpp=
// C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
// and more
```
----
```cpp=
#include<bits/stdc++.h>
```
* 引入大部分的常用標頭檔
* 部分比賽和 Online Judge 不支援這個標頭檔,測機務必先測試可否使用
* 占用較大的記憶體空間,限制較緊時應避免使用此標頭檔
---
## 整行輸入
```cpp=
getline(cin, s);
```
* `s` 為一個 `string`
* 置於 `cin` 後須先讀入一空白行
----
```cpp=
int n;
cin >> n;
getline(cin, s);
cout << s << '\n';
```
input:
```
7
a b cde
```
output:
```
```
----
```cpp=
int n;
cin >> n;
getline(cin, s);
getline(cin, s);
cout << s << '\n';
```
input:
```
7
a b cde
```
output:
```
a b cde
```
----
## 輸入優化
```cpp=
ios_base::sync_with_stdio(false);
cin.tie(0);
```
* 在使用 `cin` 讀入大量內容時務必使用
* 使用後不得與 C 語言的輸入(`scanf` 等)混用
(可參考 bit.ly/chino_cin 的說明)
* 使用後在本機測試時會累積大量輸出後再一次顯示到螢幕上
----
## 用 '\n' 取代 endl
* 原因與前一則類似
(可參考 bit.ly/chino_cin 的說明)
* 大量換行使用 `endl` 會拖慢程式速度
---
## #define
用 ```#define A B``` 將程式碼中的 `A` 取代成 `B`
```cpp=
#define PB push_back
// ...
v.push_back(5);
v.PB(5); // 兩行功能相同
```
----
```cpp=
#define REP(i, n) for(int i=0; i<int(n); i++)
#define ALL(X) X.begin(),X.end()
#define SORTA(X) sort(ALL(X))
#define SZ(X) (int)X.size()
vector<int> arr(n);
for (int i = 0; i < n; i++)
cout << arr[i] << ' ';
REP (i, n) cout << arr[i] << ' ';
SORTA(arr);
sort(ALL(arr));
sort(arr.begin(), arr.end());
```
----
**特別注意**
```cpp=
#define DOUBLE(A) A+A
int a = 5;
cout << DOUBLE(a) * DOUBLE(a) << '\n';
// 相當於 cout << 5 + 5 * 5 + 5 << '\n'; 先乘除後加減
```
output: `35`
```cpp=
#define DOUBLE(A) (A+A)
int a = 5;
cout << DOUBLE(a) * DOUBLE(a) << '\n';
```
output: `100`
---
## 重新定義型別名
```cpp=
using LL = long long
using PLL = pair<LL, LL>
LL a = 2147483648;
PLL p = {a, a};
```
{"metaMigratedAt":"2023-06-15T11:44:47.265Z","metaMigratedFrom":"Content","title":"各種競賽技巧","breaks":true,"contributors":"[{\"id\":\"6b95215f-91a7-4eaf-bcfe-d43740108f96\",\"add\":2130,\"del\":186}]"}