---
# System prepended metadata

title: 小技巧

---

# I/O 加速(ZJ常用)
在main內加上這幾行
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);    
}
```
接下來正常寫程式即可
# continue/break
```cpp=
for()
{
    if()
        continue;//跳過這次
    if()
        break;//結束迴圈
}
```
# 排序&反轉
## 陣列
```cpp=
int a[n];
sort(a,a+n);//排序
reverse(a,a+n);//反轉
```
## 字串及動態陣列(APCS >3)
```cpp=
string s;//字串
reverse(s.begin(),s.end());//string幾乎沒在用排序
    
vector<int> v;//動態陣列
sort(v.begin(),v.end());
reverse(v.begin(),v.end()); 
```

# 尋找最大最小值
## 第一種作法
```cpp=
int a[n];
int mins=INT_MAX,maxs=-1;
for(int i=0;i<n;i++)
{
    if(mins>a[i])
        mins=a[i];
    if(maxs<a[i])
        maxs=a[i];
}
```
## 第二種作法
```cpp=
int a[n];
int mins=INT_MAX,maxs=-1;
for(int i=0;i<n;i++)
{
    mins=min(mins,a[i]);
    maxs=max(maxs,a[i]);
}
```
## 第三種作法
```cpp=
int a[n];
sort(a,a+n);
cout<<a[0]<<endl;//min
cout<<a[n-1]<<endl;//max
```
# 巢狀迴圈(多個迴圈)
以[c295. 最大和](https://zerojudge.tw/ShowProblem?problemid=c295)為例
```cpp=
for(int i=0;i<m;i++)
{
    for(int j=0;j<n;j++)
    {
        
    }
}
```
m表示有m行
n表示每行有n個元素
注意內外迴圈不可用相同變數，三個或以上以此類推

# 整行讀入
```cpp=
string s;
getline(cin,s);
```
這會整行讀入(連同空白)，直到遇到換行

# 切字串
```cpp=
string s,ss;
ss=s.substr(0,3);
```
這時候的ss會是從s[0]切大小為3的字串
