---
# System prepended metadata

title: 112 上學期電算社 C++ 班社課
tags: [電算社]

---

# 112 上學期電算社 C++ 班社課
:::info 
社網：https://hsnu-crc-45.github.io/web/
下學期 C++ 社課：https://hackmd.io/@harrisyu/hsnucrc1122
:::
### 各大 OJ （線上評測系統）
- [ZeroJudge](https://zerojudge.tw/ "ZeroJudge") 龐大題庫（很多水題就是了）
    - [使用方式](https://steam.oxxostudio.tw/category/python/zerojudge/about.html)
- [TIOJ](https://tioj.ck.tp.edu.tw/ "TIOJ") 建中的OJ
- [Codeforces](https://codeforces.com/ "Codeforces")
- [AtCoder](https://atcoder.jp/ "AtCoder")
- [CSES](https://cses.fi/ "CSES")

---

## 9/8 社課
- 簡報：[9/1 複習、變數運算、選擇結構](https://hackmd.io/@harrisyu/hsnucrc1121-1)
- 上禮拜上課用的筆記：[Hello world](https://hackmd.io/@harrisyu/BJJGS6c7n)、[資料型態與變數](https://hackmd.io/@harrisyu/SJ2D9j9Q2)
:::spoiler 課後練習
- [ZeroJudge a001](https://zerojudge.tw/ShowProblem?problemid=a001)
- [ZeroJudge e926](https://zerojudge.tw/ShowProblem?problemid=e926)
- [ZeroJudge a002](https://zerojudge.tw/ShowProblem?problemid=a002)
- [ZeroJudge a003](https://zerojudge.tw/ShowProblem?problemid=a003)
- [ZeroJudge d050](https://zerojudge.tw/ShowProblem?problemid=d050)
- [ZeroJudge d065](https://zerojudge.tw/ShowProblem?problemid=d065)
- [ZeroJudge d827](https://zerojudge.tw/ShowProblem?problemid=d827)
- [ZeroJudge e835](https://zerojudge.tw/ShowProblem?problemid=e835)

:::

:::spoiler 詳解
### a001. 哈囉

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    string s;
    cin >> s;
    cout << "hello, " << s;
}
```
### e926. 跳脫字元

在有些符號之前加上反斜線 **"\\"** 會有特殊的作用
像是 **"\n"** 為換行字元，這些符號稱為 **"跳脫字元"**
如果要取消這些有功能符號，可以在這些符號前再加上一個 **"\\"**

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    cout << "|'o'|" << '\n';
    cout << "\\^_^/" << '\n';
    cout << "(\"o\")" << '\n';
    cout << "[-%-]";
    
    /*    你也可以這樣寫，只是很醜
    cout << "|'o'|\n\\^_^/\n(\"o\")\n[-%-]";
    */
}
```
### a002. 簡易加法

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    int a, b;
    cin >> a >> b;
    cout << a+b;
}
```
### a003. 兩光法師占卜術

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    int m, d, s;
    cin >> m >> d;
    s=(m*2+d)%3;
    if(s==0) cout << "普通";
    else if(s==1) cout << "吉";
    else cout << "大吉";
}
```
### d050. 妳那裡現在幾點了？

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    int a;
    cin >> a;
    a+=9;
    if(a>=24) a-=24;
    cout << a;
}
```
### d065. 三人行必有我師 (1 行版)

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    int a, b, c;
    cin >> a >> b >> c;
    if(a>=b&&a>=c) cout << a;
    else if(b>=a&&b>=c) cout << b;
    else cout << c;
}
```
### d827. 買鉛筆

一打比較便宜

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin >> n;
    cout << n/12*50+n%12*5 << endl;
}
```
### e835. p2. 表演座位 (Seats)

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin >> n;
    if(n<=2500){
        if(n%25) cout << "1 " << n/25+1 << ' ' << n%25;
        else cout << "1 " << n/25 << ' ' << 25;
    }
    else if(n<=7500){
        if((n-2500)%50) cout << "2 " << (n-2500)/50+1 << ' ' << (n-2500)%50;
        else cout << "2 " << (n-2500)/50 << ' ' << 50;
    }
    else{
        if((n-7500)%25) cout << "3 " << (n-7500)/25+1 << ' ' << (n-7500)%25;
        else cout << "3 " << (n-7500)/25 << ' ' << 25;
    }
}
```
:::

## 9/15 社課
- 簡報：[迴圈](https://hackmd.io/@shusus/BkRKX7yJ6)
:::spoiler 課後練習
- [ZeroJudge a244](https://zerojudge.tw/ShowProblem?problemid=a244)
- [ZeroJudge a005](https://zerojudge.tw/ShowProblem?problemid=a005)
- [ZeroJudge a010](https://zerojudge.tw/ShowProblem?problemid=a010)
- [ZeroJudge a024](https://zerojudge.tw/ShowProblem?problemid=a024) **（要用迴圈做哦~）**
- [ZeroJudge a038](https://zerojudge.tw/ShowProblem?problemid=a038)
- [ZeroJudge c013](https://zerojudge.tw/ShowProblem?problemid=c013)
- [ZeroJudge j605](https://zerojudge.tw/ShowProblem?problemid=j605)
:::

:::spoiler 詳解
### a244. 新手訓練 ~ for + if

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    long long n, a, b, c;
    cin >> n;
    for(int i=0; i<n; i++){
        cin >> a >> b >> c;
        if(a==1) cout << b+c << '\n';
        if(a==2) cout << b-c << '\n';
        if(a==3) cout << b*c << '\n';
        if(a==4) cout << b/c << '\n';
    }
}
```

### a005. Eva 的回家作業

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    int t, a, b, c, d;
    cin >> t;
    for(int i=0; i<t; i++){
        cin >> a >> b >> c >> d;
        cout << a << ' ' << b << ' ' << c << ' ' << d << ' ';
        if(a+c==2*b) cout << 2*d-c << '\n';
        else if(a*c==b*b) cout << d*d/c << '\n';
    }
}
```
### a010. 因數分解

最小質數為 $2$，所以從 $2$ 開始除
對於每個 $i$ 都要檢查是否可以整除 $a$
利用 $n$ 紀錄其指數部分

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    int a;
    cin >> a;
    for(int i=2; i<=a; i++){
        int n=0;
        while(a%i==0){
            if(n==0) cout << i;
            a/=i;
            n++;
        }
        if(n>1) cout << "^" << n;
        if(a==1) break;
        if(n!=0) cout << " * ";
    }
}
```

### a024. 最大公因數(GCD)

本題利用**輾轉相除法** 
$\forall a, b, q, r\in Z$
若 $a=bq+r$，則$\gcd(a, b)=\gcd(b, r)$

以下為證明
$(a, b)|a \land (a,b)|b \Rightarrow (a, b)|a-bq=r$
$\Rightarrow (a, b)|(b, r)$
$(b, r)|b \land (b, r)|r \Rightarrow (b, r)|bq+r=a$
$\Rightarrow (b, r)|(a, b)$
$\therefore (a, b)=(b, r)$

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    int a, b;
    cin >> a >> b;
    while(b){
        int r=a%b;
        a=b;
        b=r;
    }
    cout << a << '\n';
}
```

### a038. 數字翻轉

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    int a, ans=0;
    cin >> a;
    while(a){
        ans=ans*10+a%10;
        a/=10;
    }
    cout << ans;
}
```

### c013. 00488 - Triangle Wave

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int n, a, f;

int main(){
    cin >> n;
    for(int i=0; i<n; i++){
        cin >> a >> f;
        for(int j=0; j<f; j++){
            for(int k=1; k<=a; k++){
                for(int l=0; l<k; l++) cout << k;
                cout << '\n';
            }
            for(int k=a-1; k>=0; k--){
                for(int l=0; l<k; l++) cout << k;
                cout << '\n';
            }
        }
    }
}
```

### j605. 1. 程式考試

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int n, mxt, mx, wrong=0;

int main(){
    cin >> n;
    for(int i=0, t, s; i<n; i++){
        cin >> t >> s;
        if(!i) mxt=t, mx=s;
        if(s>mx) mxt=t, mx=s;
        if(s==-1) wrong++;
    }
    int sum=mx-n-wrong*2;
    if(sum<0) sum=0;
    cout << sum << ' ' << mxt << '\n';
}
```
:::

## 9/22 社課
- 簡報：[陣列與字串](https://hackmd.io/@harrisyu/hsnucrc1121-3)

:::spoiler 課後練習
- [ZeroJudge a015](https://zerojudge.tw/ShowProblem?problemid=a015)
- [ZeroJudge a224](https://zerojudge.tw/ShowProblem?problemid=a224)
- [ZeroJudge a248](https://zerojudge.tw/ShowProblem?problemid=a248)
- [ZeroJudge a528](https://zerojudge.tw/ShowProblem?problemid=a528)
- [ZeroJudge a628](https://zerojudge.tw/ShowProblem?problemid=a628)
- [ZeroJudge b367](https://zerojudge.tw/ShowProblem?problemid=b367)
- [ZeroJudge b759](https://zerojudge.tw/ShowProblem?problemid=b759)
- [ZeroJudge e267](https://zerojudge.tw/ShowProblem?problemid=e267)
- [ZeroJudge e798](https://zerojudge.tw/ShowProblem?problemid=e798)
- [ZeroJudge j606](https://zerojudge.tw/ShowProblem?problemid=j606)
:::

:::spoiler 詳解
### a015. 矩陣的翻轉

從題目中給的範例可以看出
$b[i][j]=a[j][i], 0\le i<c, 0\le j<r$
其中 $a$ 是原陣列，$b$ 是翻轉後的陣列

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int r, c, a[105][105], b[105][105];

int main(){
    while(cin >> r >> c){
        for(int i=0; i<r; i++){
            for(int j=0; j<c; j++){
                cin >> a[i][j];
            }
        }
        for(int i=0; i<c; i++){
            for(int j=0; j<r; j++){
                b[i][j] = a[j][i];
            }
        }
        for(int i=0; i<c; i++){
            for(int j=0; j<r; j++){
                cout << b[i][j] << ' ';
            }
            cout << '\n';
        }
    }
}
```

### a224. 明明愛明明

先把小寫換成大寫（都換成其中一種），然後計算每個字母數量
如果每個字母數量都是偶數，就一定可以形成迴文
如果有一個字母數量為奇數，那那個多出來的字母可以放在中間
但若有超過一個字母數量為奇數，就無法形成迴文

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

string a, b;

int main(){
    while(cin >> a){
        int x[30]={}, y=0;
        b="";
        for(int i=0; i<a.length(); i++){
            if(a[i]>='A'&&a[i]<='Z') b+=a[i];
            else if(a[i]>='a'&&a[i]<='z') b+=a[i]-'a'+'A';
        }
        for(int i=0; i<b.length(); i++) x[b[i]-'A']++;
        for(int i=0; i<=25; i++){
            if(x[i]%2){
                y++;
            }
        }
        if(y<=1) cout << "yes !" << '\n';
        else cout << "no..." << '\n';
    }
}
```
### a248. 新手訓練 ~ 陣列應用

這題根本不需要用到陣列（
直式除法怎麼做，我們就怎麼做

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int a, b, c, n=0;

int main(){
    while(cin >> a >> b >> n){
        c=a/b;
        a=a%b*10;
        cout << c << '.';
        for(int i=0; i<n; i++){
            c=a/b;
            a=a%b*10;
            cout << c;
        }
        cout << '\n';
    }
}
```

### a528. 大數排序

這題超綱了（
你們就且看且看吧

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int n;
string s[1005];

bool cmp(string a, string b){
    if(a[0]!='-'&&b[0]=='-') return false;
    if(a[0]=='-'&&b[0]!='-') return true;
    if(a[0]!='-'&&b[0]!='-'){
        if(a.length()==b.length()){
            for(int i=0; i<a.length(); i++){
                if(a[i]!=b[i]) return a[i]<b[i];
            }
        }
        return a.length()<b.length();
    }
    if(a[0]=='-'&&b[0]=='-'){
        if(a.length()==b.length()){
            for(int i=1; i<a.length(); i++){
                if(a[i]!=b[i]) return a[i]>b[i];
            }
        }
        return a.length()>b.length();
    }
}

int main(){
    while(cin >> n){
        for(int i=0; i<n; i++) cin >> s[i];
        sort(s, s+n, cmp);
        for(int i=0; i<n; i++) cout << s[i] << '\n';
    }
}
```

### a628. 8. Number Spiral

螺旋矩陣
每個人都要體驗一遍的基礎實作題

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int n, a[20][20];

int main(){
    while(cin >> n){
        int turn=0, x=n/2, y=n/2;
        a[x][y]=0;
        int cnt=1, t=1;
        for(int i=0; i<n-1; i++){
            for(int j=0; j<t; j++){
                if(turn==0) y++;
                else if(turn==1) x--;
                else if(turn==2) y--;
                else if(turn==3) x++;
                a[x][y]=cnt;
                cnt++;
            }
            turn++;
            if(turn==4) turn=0;
            for(int j=0; j<t; j++){
                if(turn==0) y++;
                else if(turn==1) x--;
                else if(turn==2) y--;
                else if(turn==3) x++;
                a[x][y]=cnt;
                cnt++;
            }
            turn++;
            if(turn==4) turn=0;
            t++;
        }
        for(int j=0; j<t; j++){
            if(turn==0) y++;
            else if(turn==1) x--;
            else if(turn==2) y--;
            else if(turn==3) x++;
            a[x][y]=cnt;
            cnt++;
        }
        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                if(a[i][j]>=100) cout << ' ';
                else if(a[i][j]>=10) cout << "  ";
                else cout << "   ";
                cout << a[i][j];
            }
            cout << '\n';
        }

    }
}
```

### b367. 翻轉世界

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int t, n, m, arr[15][15];

int main(){
    cin >> t;
    while(t--){
        cin >> n >> m;
        for(int i=0; i<n; i++){
            for(int j=0; j<m; j++){
                cin >> arr[i][j];
            }
        }
        bool flag=0;
        for(int i=0; i<n; i++){
            if(flag) break;
            for(int j=0; j<m; j++){
                if(arr[i][j]!=arr[n-1-i][m-1-j]) flag=1;
            }
        }
        if(flag) cout << "keep defending\n";
        else cout << "go forward\n";
    }
}
```

### b759. 我明明就有說過= =

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    string a;
    cin >> a;
    for(int i=0; i<a.length(); i++){
        for(int j=i; j<a.length()+i; j++){
            cout << a[j%a.length()];
        }
        cout << '\n';
    }
}
```

### e267. 11192 - Group Reverse

**參考程式碼**
```cpp=
#include <bits/stdc++.h>
using namespace std;

int n;
string s;

int main(){
    while(cin >> n, n){
        cin >> s;
        int cnt=s.length()/n, last=0;
        for(int i=0; i<n; i++){
            for(int j=last+cnt-1; j>=last; j--){
                cout << s[j];
            }
            last+=cnt;
        }
        cout << '\n';
    }
}
```

### e798. p5. 卷積神經網路

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int n, arr[20][20];

int main(){
    cin >> n;
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            cin >> arr[i][j];
        }
    }
    for(int i=0; i<n; i+=2){
        for(int j=0; j<n; j+=2){
            int mx=arr[i][j];
            if(arr[i+1][j]>mx) mx=arr[i+1][j];
            if(arr[i][j+1]>mx) mx=arr[i][j+1];
            if(arr[i+1][j+1]>mx) mx=arr[i+1][j+1];
            cout << mx << ' ';
        }
        cout << '\n';
    }
}
```

### j606. 2. 造字程式

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int k, q, r;
string s;
char arr[25][25];

int main(){
    cin >> k >> q >> r >> s;
    for(int i=0; i<s.length(); i++) arr[0][i+1]=s[i];
    for(int i=1; i<=q; i++){
        for(int j=1, x; j<=k; j++){
            cin >> x;
            arr[i][x]=arr[i-1][j];
        }
    }
    for(int i=1; i<=r; i++){
        for(int j=1; j<=q; j++){
            cout << arr[j][i];
        }
        cout << '\n';
    }
}
```
:::

## 10/13 社課
- 簡報：[函式](https://hackmd.io/@shusus/HJSAaBSb6)

:::spoiler 課後練習
- [e156. 良心題: 求和](https://zerojudge.tw/ShowProblem?problemid=e156)
- [d487. Order's computation process](https://zerojudge.tw/ShowProblem?problemid=d487)
- [d255. 11417 - GCD](https://zerojudge.tw/ShowProblem?problemid=d255)
- [c002. 10696 - f91](https://zerojudge.tw/ShowProblem?problemid=c002)
- [c039. 00100 - The 3n + 1 problem](https://zerojudge.tw/ShowProblem?problemid=c039)
- [c813. 11332 - Summing Digits](https://zerojudge.tw/ShowProblem?problemid=c813)
- [a227. 三龍杯 -> 河內之塔](https://zerojudge.tw/ShowProblem?problemid=a227)
:::

:::spoiler 詳解
### e156. 良心題: 求和

做人要有良心（

**參考程式碼**
```cpp=
#include<bits/stdc++.h>
using namespace std;

int n;

int sum(int a){
    if(a==1) return a;
    return a+sum(a-1);
}

int main(){
    cin >> n;
    cout << sum(n);
}
```

### d487. Order's computation process

```cpp=
#include<bits/stdc++.h>
using namespace std;

int n;

void solve(int a, int ans){
    if(a==0){
        cout << "= " << ans;
        return;
    }
    if(a==n){
        cout << a << ' ';
        solve(a-1, ans*a);
        return;
    }
    cout << "* " << a << ' ';
    solve(a-1, ans*a);

}

int main(){
    while(cin >> n){
        cout << n << "! = ";
        if(n==0) cout << "1 = 1";
        else solve(n, 1);
        cout << '\n';
    }
}
```

### d255. 11417 - GCD

題目就給答案了

順便補充一下
while(cin >> n, n)
意思是讀到 n==0 或 EOF(End of File)

```cpp=
#include<bits/stdc++.h>
using namespace std;

int n, g=0;

int gcd(int a, int b){
    if(a%b==0) return b;
    return gcd(b, a%b);
}

int main(){
    while(cin >> n, n){
        g=0;
        for(int i=1; i<n; i++){
            for(int j=i+1; j<=n; j++){
                g+=gcd(i,j);
            }
        }
        cout << g << '\n';
    }
}
```

### c002. 10696 - f91

```cpp=
#include<bits/stdc++.h>
using namespace std;

int f(int k){
    if(k<=100){
        return f(f(k+11));
    }
    else
        return k-10;
}

int main(){
    int a;
    while(cin >> a, a){
        cout << "f91(" << a << ") = " << f(a) << '\n';
    }
}
```

### c039. 00100 - The 3n + 1 problem

```cpp=
#include<bits/stdc++.h>
using namespace std;

int main(){
    int a, b;
    while(cin >> a >> b){
        int mx=0;
        for(int i=min(a, b); i<=max(a, b); i++){
            int n=i, cnt=0;
            while(n!=1){
                if(n%2) n=3*n+1;
                else n/=2;
                cnt++;
            }
            cnt++;
            if(cnt>mx) mx=cnt;

        }
        cout << a << ' ' << b << ' ' << mx << '\n';
    }
}
```
### c813. 11332 - Summing Digits

記得比較上面的函式讀不到下面還沒宣告的函式
所以 g() 要放下面

```cpp=
#include<bits/stdc++.h>
using namespace std;

int f(int n){
    int s=0;
    while(n>=10){
        s+=n%10;
        n/=10;
    }
    s+=n;
    return s;
}

int g(int n){
    while(n>=10) n=f(n);
    return n;
}

int main(){
    int n;
    while(cin >> n, n){
        cout << g(n) << '\n';
    }
}
```

### a227. 三龍杯 -> 河內之塔

~~經典題ㄋㄟ，怎麼能不會~~
弄懂他才算真正進入遞迴的領域

```cpp=
#include<bits/stdc++.h>
using namespace std;

int hanoi(int n, char a, char b, char c){
    if(n==1){
        cout << "Move ring "<< 1 << " from " << a << " to " << c << '\n';
    }
    else{
        hanoi(n-1, a, c, b); // n-1 個做河內塔
        cout << "Move ring "<< n << " from " << a << " to " << c << '\n';
        hanoi(n-1, b, a, c);
    }
}

int main(){
    int n;
    while(cin >> n){
        hanoi(n, 'A', 'B', 'C');
        cout << '\n';
    }
}
```
:::

## 10/20 第一次社內賽

- [題本](https://hackmd.io/@harrisyu/SJHRH2yza)
- [題解](https://hackmd.io/@harrisyu/S1RunjuZ6)

## 10/27 社課
- 簡報：[指標](https://hackmd.io/@shusus/B1ndUGOMa)

## 11/3 社課
- 簡報：[struct、STL(1)](https://hackmd.io/@harrisyu/hsnucrc1121-6)

:::spoiler 課後練習
- [d091. 00476 - Points in Figures: Rectangles](https://zerojudge.tw/ShowProblem?problemid=d091)
- [a104. 排序](https://zerojudge.tw/ShowProblem?problemid=a104)
- [h075. 成績排名](https://zerojudge.tw/ShowProblem?problemid=h075)
- [a915. 二维点排序](https://zerojudge.tw/ShowProblem?problemid=a915)
- [k184. pA. 房屋推薦 (house)](https://zerojudge.tw/ShowProblem?problemid=k184) 如果太難我會把它撤掉（
:::

:::spoiler 詳解
### d091. 00476 - Points in Figures: Rectangles

我寫題解才發現他的測資是爛的XD
在第 985 個點處輸出沒有空格

```cpp=
#include<bits/stdc++.h>
using namespace std;

char c;
double x, y;
int num=0;

struct rect{
    double a, b, c, d;
};
vector<rect> v;

int main(){
    while(cin >> c){
        if(c=='*') break;
        double a, b, c, d;
        cin >> a >> b >> c >> d;
        v.push_back({a, b, c, d});
    }
    while(cin >> x >> y){
        if(x==9999.9&&y==9999.9) break;
        num++;
        int label=1;
        for(int i=0; i<v.size(); i++){
            if(x>=v[i].a&&x<=v[i].c&&y>=v[i].d&&y<=v[i].b){
                label=0;
                cout << "Point " << num << " is contained in figure " << i+1 << '\n';
            }
        }
        if(label){
            if(num==985){
                cout << "Point " << num << " is not contained in any figure" << '\n';
                continue;
            }
            cout << "Point " << num << " is not contained in any figure " << '\n';
        }
    }
}
```

### a104. 排序

直接看簡報就會啦

```cpp=
#include<bits/stdc++.h>
using namespace std;

int n;

int main(){
    while(cin >> n){
        vector<int> v;
        for(int i=0, x; i<n; i++){
            cin >> x;
            v.push_back(x);
        }
        sort(v.begin(), v.end());
        for(int i=0; i<v.size(); i++) cout << v[i] << ' ';
        cout << '\n';
    }
}
```

### h075. 成績排名

```cpp=
#include<bits/stdc++.h>
using namespace std;

int n;

struct student{
    int id, a, b, c;
    double aver;
    bool operator<(student tmp){
        if(aver!=tmp.aver) return aver<tmp.aver;
        if(a!=tmp.a) return a<tmp.a;
        if(b!=tmp.b) return b<tmp.b;
        if(c!=tmp.c) return c<tmp.c;
        return id>tmp.id; // 編號越小排越前面
    }
} arr[105];

int main(){
    cin >> n;
    for(int i=0; i<n; i++){
        int a, b, c, d;
        cin >> a >> b >> c >> d;
        arr[i]={a, b, c, d};
        arr[i].aver=(b*5+c*3+d*2)/10.0; // 平均有可能是小數
    }
    sort(arr, arr+n);
    for(int i=n-1; i>=0; i--) cout << arr[i].id << ' ' << arr[i].aver << '\n';
}
```

### a915. 二维点排序

pair 的大小比較是先比前面再比後面

```cpp=
#include<bits/stdc++.h>
using namespace std;

int n;
vector<pair<int, int>> point;

int main(){
    cin >> n;
    for(int i=0, a, b; i<n; i++){
        cin >> a >> b;
        point.push_back({a, b});
    }
    sort(point.begin(), point.end());
    for(int i=0; i<n; i++) cout << point[i].first << ' ' << point[i].second << '\n';
}
```

### k184. pA. 房屋推薦 (house)

TOI 初選的題目
如果只是單純排序的話會 TLE
要做 IO 優化

```cpp=
#include<bits/stdc++.h>
using namespace std;

int n, m;
struct house{
    int id, r;
    long long x, y;
    long long mnd=(1LL<<63)-1; // 設為 long long 最大值
    bool operator<(house a){
        if(mnd==a.mnd&&r==a.r) return id<a.id;
        if(mnd==a.mnd) return r<a.r;
        return mnd<a.mnd;
    }
} home[100005];

int main(){
    ios::sync_with_stdio(0); cin.tie(0); // 你們可以把這串程式碼拿去查他是什麼

    cin >> n >> m;
    for(int i=0; i<n; i++){
        cin >> home[i].x >> home[i].y >> home[i].r;
        home[i].id=i+1;
    }
    for(int i=0, x, y; i<m; i++){
        cin >> x >> y;
        for(int j=0; j<n; j++){
            home[j].mnd=min(home[j].mnd, (x-home[j].x)*(x-home[j].x)+(y-home[j].y)*(y-home[j].y));
        }
    }
    sort(home, home+n);
    for(int i=0; i<n; i++) cout << home[i].id << '\n';
}
```

:::

## 11/10 社課
- 簡報：[STL(2)](https://hackmd.io/@harrisyu/hsnucrc1121-7)

:::spoiler 課後練習
- [e447. queue 練習](https://zerojudge.tw/ShowProblem?problemid=e447)
- [i213. stack 練習](https://zerojudge.tw/ShowProblem?problemid=i213)
- [e155. 10935 - Throwing cards away I](https://zerojudge.tw/ShowProblem?problemid=e155)
- [a565. 2.p&q的邂逅](https://zerojudge.tw/ShowProblem?problemid=a565)
- [c123. 00514 - Rails](https://zerojudge.tw/ShowProblem?problemid=c123)
- [d221. 10954 - Add All](https://zerojudge.tw/ShowProblem?problemid=d221)
- [c875. 107北二2.裝置藝術](https://zerojudge.tw/ShowProblem?problemid=c875)
- [d123. 11063 - B2-Sequence](https://zerojudge.tw/ShowProblem?problemid=d123)
- [e641. 10260 - Soundex](https://zerojudge.tw/ShowProblem?problemid=e641)
:::

## 11/17 社課

- 簡報：[Linked list](https://hackmd.io/@shusus/SyG8AzG4p)

:::spoiler 課後練習
- [b938. kevin 愛殺殺](https://zerojudge.tw/ShowProblem?problemid=b938)
- [[TIOJ 1225] 數字合併](https://tioj.ck.tp.edu.tw/problems/1225)
- [[Sprout 21] 陸行鳥大賽車](https://neoj.sprout.tw/problem/21/)
- [[Sprout 25] 一天遊戲只能一小時](https://neoj.sprout.tw/problem/25/)
:::

## 12/1 社課

- 簡報：[重載、前置處理、其他...](https://hackmd.io/@harrisyu/hsnucrc1121-9)

## 12/15 社課

- 簡報：[複雜度](https://hackmd.io/@shusus/H1r30odLT#/)

## 12/22 社課

- 簡報：[進位制、二進位存儲與運算](https://hackmd.io/@harrisyu/hsnucrc1121-11)

## 12/29 第二次社內賽

- [題本](https://hackmd.io/@harrisyu/B1F0NsgOa)
- [題解](https://hackmd.io/@harrisyu/ry4GoCFPa)