---
# System prepended metadata

title: C++ JMJudge writeup
tags: [writeup]

---

# C++ JMJudge writeup
題目來源: [JMJUDGE](https://jmj.cmgsh.tp.edu.tw/UserStatistic)
```111那屆```  y1w3n
ID: 早‧還沒睡飽‧安


---

==以下防雷，解題記錄用，建議還是自己先思考過題目==


---

# 高一資訊科技

b001. 小學生的三角形面積計算
```cpp=
#include<iostream>
using namespace std;
int main(){
    float a, h;
    cin>>a>>h;
    cout<<float(h*a/2);
}
``` 

b002. BMI值計算機
```cpp=
#include<iostream>
using namespace std;

float BMI(float w,float h){
  h=h/100;
  float BMI=w/(h*h);
  return BMI;
}
int main(){
  float h,w;
  cin>>h>>w;
  cout<<BMI(w,h);
}
```

b004. 小學生的梯形面積計算
```cpp=
#include<iostream>
using namespace std;
int main(){
    float a, b, c;
    cin>>a>>b>>c;
    cout<<float (a+b)*c/2;
}
```
b005. 高中生的三角形面積與周長
```cpp=
#include<iostream>
#include<math.h> //函式庫<math.h>，宣告許多跟數學計算相關的函數
using namespace std;
int main(){
    float a, b, c, s, d;
    cin>>a>>b>>c;
    s=(a+b+c)/2;
    d=s*(s-a)*(s-b)*(s-c);
    cout<<sqrt(d)<<endl<<(a+b+c);  //sqrt(a)是開根號
}
```

b006. 高中生的一元二次方程式的根
```cpp=
#include<iostream>
#include<math.h>
using namespace std;
int main(){
    float a, b, c, s;
    cin>>a>>b>>c;
    s=sqrt(b*b-4*a*c);
    cout<<(-b+s)/(2*a)<<endl<<(-b-s)/(2*a);
}
```
b007. 你過胖了嗎
```cpp=
#include<iostream>
using namespace std;
int main(){
    float a, b, c;
    cin>>a>>b;
    c=b/((a/100)*(a/100));
    if (c<18.5){
      cout<<"過輕";
      }
    else if(18.5<=c&&c<24){
      cout<<"健康";
    }
    else if(24<=c&&c<27){
      cout<<"過重";
    }
    else{
      cout<<"肥胖";
    }
}
```
b008. 決戰520
```cpp=
#include<iostream>
using namespace std;
int main(){
    int a, b;
    cin>>a>>b;
    if(a==b){
      cout<<"Draw";
      }
    else if(2==a&&b==5||0==a&&b==2||5==a&&b==0){
      cout<<"A win";
      }
    else{
      cout<<"B win";
    }
}
```
b009. 國中生的一元二次方程式
```cpp=
#include<iostream>
#include<math.h>
using namespace std;
int main(){
  int a,b,c;
  float D;
  cin>>a>>b>>c;
  D=(b*b)-(4*a*c);
  if(D>0){
    float e,f;
    e=(-1*b+sqrt(D))/(2*a);
    f=(-1*b-sqrt(D))/(2*a);
    cout<<float(e)<<endl<<float(f);
  }
  else if(D==0){
    float e;
    e=(-1*b+sqrt(D))/(2*a);
    cout<<float(e);
  }
  else{
   cout<<"no solution";
  }  
}
```
b010. 星星直角三角形_靠左對齊版
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n,a,b;
  cin>>n; //三角形的高(行數)
  for(a=1;a<=n;a++){ //a=1>>從第一行開始
    for(b=0;b<a;b++){ //第幾行就輸出幾個*
      cout<<"*";
    }
    cout<<endl;
  }
}
```
b011. 我想要學分嗚嗚
```cpp=
#include<iostream>
using namespace std;
int main(){
    float N, M, c;
    cin>>N>>M;
    c=(N+M)/2;
    if (c<60){
      cout<<"No";
      }
    else{
      cout<<"Yes";
    }
}
```
b012. 星星直角三角形_靠右對齊版
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n,a,b;
  cin>>n;
  for(a=1;a<=n;a++){ //a=1>>從第一行開始
    for(b=n;b>a;b--){ //空白數遞減
      cout<<" ";
    }
      for(b=1;b<=a;b++){
      cout<<"*";
    }
    cout<<endl;
  }
}
```
b013. 星星等腰三角形
```cpp=
//考慮每行輸入的空格數和*數與行數的關係
//*的個數是1,3,5……的關係及行數的兩倍減一(2n-1)
//空格數是總行數-1並逐行遞減
#include<iostream>
using namespace std;
int main(){
  int n,a,b;
  cin>>n;
  for(a=1;a<=n;a++){
    for(b=n-a;b>0;b--){
      cout<<" ";
    }
      for(b=1;b<=2*a-1;b++){
      cout<<"*";
    }
    cout<<endl;
  }
}
```
b014. 星星菱形
```cpp=
//上半:空格遞減 *遞增
//下半:空格遞增 *遞減
#include<iostream>
using namespace std;
int main(){
  int n,a,b;
  cin>>n;
  for(a=1;a<=n;a++){ //上半部(等腰
    for(b=n-a;b>0;b--){
      cout<<" ";
    }
      for(b=1;b<=2*a-1;b++){
      cout<<"*";
    }
    cout<<endl;
  }
  for(a=n-1;a>0;a--){ //下半部
    for(b=n-a;b>0;b--){
      cout<<" ";
    }
    for(b=1;b<=2*a-1;b++){
      cout<<"*";
    }
    cout<<endl;
  }  
}
```
b016. 雞兔同籠
```cpp=
#include <iostream>
using namespace std;
int main(){
    int m,n;
    cin >> m >> n;
    for(int i = 0; i <=m; i++){
        int x = i;
        int y = m-i;
        if(2*x+4*y == n){
            cout << x <<" "<< y << endl;
        }
    }
}
```
b017. 找因數
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n,a;
  cin>>n;
  a=1;
  while(n>=a){
      if(n%a==0){
        cout<<a<<endl;
        } 
      a=a+1;
  }
}
```
b019. 誰是學霸
```cpp=
#include <iostream>
using namespace std;
int main(){
    int n, score;
    cin >> n;
    int max_score = -1;
    for(int i = 1; i<=n; i++){
        cin >> score;
        if(score > max_score){
            max_score = score;
        }
    }
    cout <<  max_score << endl;
}
```
法二 by遞迴
```cpp=
#include <iostream>
using namespace std;
const int MAXN=55;
int max_score(int A[],int n,int id){
  if(id==n-1){
    return id;
  }
  int max_back=max_score(A,n,id+1);
  if(A[id]>max_back){
    return A[id];
  }
  else{
    return max_back;
  }
}
int main() {
  int n;
  int id=0;
  cin>>n;
  int A[MAXN]={};
  for(int i=0;i<n;i++){
    cin>>A[i];
  }
  cout<<max_score(A,n,id)<<endl;
}
```
b020. 成績公布-2
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n;
  cin>>n;
  int a[41]={ };
    for(int i= 0; i<n; i++){
        cin>>a[i];
    }
  int p;
  cin>>p;
  cout<<a[p-1];
}
```
b021. 誰是學霸之到底是誰
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n, score,a;
  a=1;
  cin >> n;
  int max_score = -1;
  for(int i = 1; i<=n; i++){
    cin >> score;
    if(score > max_score){
      max_score = score;
      a=i;
    }
  }
  cout <<  a << endl;
}
 
```
b022. 成績公布
```cpp=
#include<iostream>
using namespace std;
int main(){
  int a[11]={85,35,65,27,68,94,20,100,58,78};
  int p;
  cin>>p;
  cout<<a[p-1];
}

```
b023. 算平均
```cpp=
#include<iostream>
using namespace std;
int main(){
    float c=0;
    float n, i;
    cin>>n;
  for(int i=0;i<n;i++){
    int b;
    cin>>b;
    c=c+b;
  }
  cout<<float(c/n);
}
```
法二 by自訂義
```cpp=
#include <bits/stdc++.h>
using namespace std;
float S(float n,int b){
  float S=0;
  for(int i=0;i<n;i++){
    cin>>b;
    S=S+b;
  }
 return S/n;
}
int main() {
  float n, i;
  float c=0;
  int b;
  cin>>n;
  cout<<S(n,b);
}
```
b024. 低空飛過
```cpp=
#include<iostream>
using namespace std;
int main(){
  int c=0;
  int n, s,h;
  h=0;
  cin>>n;
  int ms=101;
  for(int i=1;i<=n;i++){
    cin>>s;
    if (s<ms&&s>=60){
      ms=s;
    }
    if(s>h){
      h=s;
      }

    }
  if(h<60){
    cout<<"QQ";
  }
  else {
    cout<<ms;
    }
}
```
b025. 小華買午餐
```cpp= 
#include<iostream>
using namespace std;
int main(){
    int a, b;
    cin>>a>>b;
    if ((a+b)<150){
      cout<<"訂購";
      }
}
```
b026. 午餐要不要配飲料
```cpp= 
#include<iostream>
using namespace std;
int main(){
    int a, b;
    cin>>a>>b;
    if ((a+b)<150){
      cout<<"訂購";
      }
    else{
      cout<<"不買飲料";
    }
}
```
b027. 午餐的抉擇
```cpp= 
#include<iostream>
using namespace std;
int main(){
    int a, b;
    cin>>a>>b;
    if(a+b>200){
      cout<<"離開";
      }
    else if(150<a+b&&a+b<=200){
      cout<<"不買飲料";
      }
    else if(a+b<=0){
      cout<<"錯誤";
      }
    else if ((a+b)<=150){
      cout<<"訂購";
      }

}
```
b028. 恭喜你可以參加複試
```cpp= 
#include<iostream>
using namespace std;
int main(){
    int a, b;
    cin>>a>>b;
    if (a>=b){
      cout<<"恭喜你可以參加複試";
      }
}
```
b029. 大雨大雨一直下
```cpp=
#include<iostream>
using namespace std;
int main(){
    float a;
    cin>>a;
    if (a<80){
      cout<<"一般";
      }
    else if(80<=a&&a<200){
      cout<<"大雨";
    }
    else if(200<=a&&a<350){
      cout<<"豪雨";
    }
    else if(350<=a&&a<500){
      cout<<"大豪雨";
    }
    else{
      cout<<"超大豪雨";
    }
}
```
b030. 愛你幾次都可以	
```cpp= 
#include<iostream>
using namespace std;
int main(){
    int a, i;
    cin>>a;
  for(i=0;i<a;i++){
    cout<<"我愛你"<<endl;
  }   
}
```
b031. 輪值的日期	
```cpp= 
#include<iostream>
using namespace std;
int main(){
  int c,e,h,i; 
  h=0;
  cin>>c>>e;
  for(int i=c;i<=e;i++){
    cout<<i<<endl;    
  }  
}
```
b032. 小朋友學數數	
```cpp= 
#include<iostream>
using namespace std;
int main(){
    int n, a, b;
    cin>>n>>a>>b;
  for(int i=n;i<=a;i=i+b){
    cout<<i<<endl;
  }   
}
```
b033. 在平均之上
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n,t;
  t=0;
  float a,b;
  cin>>n;
  int s[41]={ };
  for(int i= 0; i<n; i++){
        cin>>s[i];
      a=a+s[i];
    }
  b=a/n;
  for(int i= 0; i<n; i++){
    if(s[i]>=b){
      t=t+1;
    }
  }
  cout<<t;
}
```
b034. 平均之上的平均
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n;
  float t=0;
  float c=0;
  float a,b;
  cin>>n;
  int s[41]={ };
  for(int i= 0; i<n; i++){
        cin>>s[i];
      a=a+s[i];
    }
  b=a/n;
  for(int i= 0; i<n; i++){
    if(s[i]>=b){
      t=t+s[i];
      c=c+1;
    }
  }
  cout<<float(t/c);
}
```
b035. 發糖果囉(基本題)
```cpp= 
#include<iostream>
using namespace std;
int main(){
    int a, b;
    cin>>a>>b;
    cout<<int(a/b)<<endl<<(a%b);
}
```

b036. 老師請飲料	
```cpp= 
#include<iostream>
using namespace std;
int main(){
  int c=0,h=0;
  int n,s,a[40];
  cin>>n;
  for(int i=1;i<=n;i++){
    cin>>a[i];
    if (a[i]>=80){
      h=h+1;
    }
  }
  cout<<h;
}
```
b039. 發糖果囉！
```cpp=
#include<iostream>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;
    cout << a << " = " << b << " * " << a/b << " + " << a-(a/b*b);
}
```
b043. 九九乘法表(簡化版)
```cpp= 
#include<iostream>
using namespace std;
int main(){
  int n,i;
  cin>>n;
  for(int i=1;i<=n;i++){
    cout<<i<<" * "<<i<<" = "<<(i*i)<<endl;
  }
}
```

# 未分類題庫
a001. 哈囉
```cpp=
#include<iostream>
using namespace std;
int main(){
  string a;
  cin>>a;
  cout<<"hello, "<<a;
}
```
a004. 經濟大恐荒 
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n,money,a[1000];
  cin >> n;
  money=0;
  for(int i = 1; i<=n; i++){
    cin>>a[i];
  }
  for(int j = 1; j<=n; j++){
    money=money+(j*a[j]);
  }
  cout <<  money << endl;
}
```
a007. K-I-S-S-I-N-G
```cpp=
#include<iostream>
using namespace std;
int main(){
  string g,b;
  getline(cin,g); //讓輸入不被空格打斷
  getline(cin,b);
  cout<<g<<" and "<<b<<" sitting in the tree";
}
```
a012. Johnny B. Goode
```cpp=
#include<iostream>
using namespace std;
int main(){
  string n;
  getline(cin,n);
  cout<<"Go, "<<n<<", go go";
}
```
a013. You can say that again! 
```cpp=
#include<iostream>
using namespace std;
int main(){
  string n;
  getline(cin,n);
  for(int i=0;i<2;i++){
    cout<<n<<" ";
  }
}
```
a011. 加減乘除
```cpp=
#include<iostream>
#include<math.h>
using namespace std;
int main(){
  int n,b;
  char a; 
  while(cin>>n){         //while(規則)
    cin>>a>>b;          //符合規則就執行
    if(a=='+'){
      cout<<n+b<<endl;
    }
    if(a=='-'){
      cout<<n-b<<endl;
    }
    if(a=='*'){
      cout<<n*b<<endl;
    }
    if(a=='/'){
      cout<<n/b<<endl;
    }
  }
}
```
a014. 中華民國萬歲！ 
```cpp= 
#include<iostream>
using namespace std;
int main(){
    int y;
    cin>>y;
    cout<<y-1911;
}
```

a015. 妳那裡現在幾點了？ 
```cpp=
#include<iostream>
using namespace std;
int main(){
  int t,USA;
  cin>>t;
  USA=t-15;
  if(USA<0){
    cout<<24+USA;
  }
  else{
    cout<<USA;
  }
}
```
a016. 糟糕，我發燒了！
```cpp=
輸入僅有一行，含有一個整數 f (-460 ≤ f ≤ 2147483647)，代表華氏溫度。
輸出計算所得的攝氐溫度，精確到小數點以下三位。

#include<iostream>
#include<iomanip>//用於操作C++程序輸出的庫
using namespace std;
int main(){
    long double c;
    long double f;//因為最大值有2147483647，所以用long duble 記憶體空間大，精度也高。
    cin>>f;
    c=(f-32)*5/9;
    cout <<  setiosflags(ios::fixed) << setprecision(3) << c << endl;
//setprecision(3)代表取三位數；前面加上fixed就變成取小數點後三位數
}
```
a017. BASIC 的 SGN 函數 -- 板橋高中教學題
```cpp= 
#include<iostream>
using namespace std;
int main(){
    int i;
    cin>>i;
    if (i==0){
      cout<<"0";
      }
    else if(i>0){
      cout<<"1";
    }
    else{
      cout<<"-1";
    }
}
```
a018. 還要等多久啊？
```cpp=
#include <iostream>
using namespace std;
int main(){
    int a;
  cin >> a;
  if(a<=25){
    cout << 25-a << endl;
  }
  else{
    cout << 85-a << endl;
  }
}
```
a019. 0 與 1 
```cpp=
#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    cout<<(n-1)*-1;
}
```
a020. ㄑㄧˊ 數？ -- 板橋高中教學題
```cpp= 
#include<iostream>
#include<math.h>
using namespace std;
int main(){
    int i;
    cin>>i;
    if (i%2==0){;
      cout<<"Even";
      }
    else{
      cout<<"Odd";
    }
}
```
a021. 三人行必有我師 
```cpp=
#include <iostream>
using namespace std;
int main(){
    int a,b,c,big;
  cin >> a >> b >> c;
    big = a; //先把第一個假設為最大的
  if(b>big){ //如果第二個比較大就取代
    big = b; 
  }
  if(c>big){
    big = c;
  }
  cout << big << endl; 
}
```
a022. 上學去吧！
```cpp=
#include<iostream>
using namespace std;

string school(int h,int m){ //自定義函數
  if(h>=17) return "Off School";
  else if(h<7) return "Off School";
  if(h==7 && m<30) return "Off School";
  else return "At School";
}
int main(){
  float h,m;
  cin>>h>>m;
  cout<<school(h,m);
}
```
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main(){
  int h,m;
  cin>>h>>m;
  if(h>=17) {
    cout<<"Off School";
  }
  else if(h<7){
    cout<<"Off School";
  } 
  else if(h==7 && m<30){
    cout<<"Off School";
  } 
  else{
    cout<<"At School";
  }
}
```
a023. 閏年判斷 
```cpp=
#include <iostream>
using namespace std;
int main(){
  int n,f;
  cin >> n;
  if(n%400==0){
    f = 1;
  }
  else if(n%100==0){
    f = 0;
  }
  else if(n%4==0){
    f = 1;
  }
  if(f == 1){
  cout << "a leap year" << endl;
  }
  else{
  cout << "a normal year" << endl;
  }
}
```
a024. 該減肥了！
```cpp=
#include<iostream>
using namespace std;
int main(){
  int w;
  cin>>w;
  if(w>50){
    cout<<w-1;
  }
  else{
    cout<<w;
  }
}

```
a025. 文文的求婚--續集 (n 行版) 
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n;
  while(cin>>n){
    int y[n];
    for(int i=0; i<n; ++i){
      cin>>y[i];
    }
    for(int i=0; i<n; ++i){
      if(y[i]%4==0 && y[i]%100!=0 || y[i]%400==0){
        cout<<"a leap year"<<endl;
      }
      else {
        cout<<"a normal year"<<endl;
      }
    }
  }
}
```
a026. 文文的求婚--續集 (0 尾版) -- 板橋高中教學題
```cpp=
#include<iostream>
using namespace std;
int main(){
  int y;
  while(cin>>y&&y!=0){
    if(y%4==0&&y%100!=0){
      cout<<"a leap year"<<endl;  
    }
    else if(y%400==0){
      cout<<"a leap year"<<endl;  
    }
    else{
      cout<<"a normal year"<<endl;
    }
  }
}
```
a027. 文文的求婚--續集 (EOF 版) -- 板橋高中教學題
```cpp=
#include<iostream>
#include <string> //來建立字串，像是字串指定、串接等
using namespace std;
int main(){
  int y;
  string a,s1;
  while(cin>>y&&s1!="EOF"){
    if(y%4==0&&y%100!=0){
      cout<<"a leap year"<<endl;  
    }
    else if(y%400==0){
      cout<<"a leap year"<<endl;  
    }
    else{
      cout<<"a normal year"<<endl;
    }
    std::string s1 = std::to_string(y); //整數轉字串
  }
}
```
a028. 文文的求婚--續集 (Case 版)
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n,a;
  a=1;
  while(cin>>n){
    int y[n];
    for(int i=0; i<n; ++i){
      cin>>y[i];
    }
    for(int i=0; i<n; ++i){
      if(y[i]%4==0 && y[i]%100!=0 || y[i]%400==0){
        cout<<"Case "<<a<<": "<<"a leap year"<<endl;
        a=a+1;
      }
      else {
        cout<<"Case "<<a<<": "<<"a normal year"<<endl;
        a=a+1;
      }
    }
  }
}
```
a029. 分組報告 
```cpp=
#include<iostream>
#include<cmath>// C++ 中一些有用的內建的數學函式
using namespace std;
int main(){
  float n;
  cin>>n;
  n=n/3;
  cout<<std::ceil(n);//小數無條件進位
}
```
a030. 電腦教室
```cpp=
//同b019
#include <iostream>
using namespace std;
int main(){
    int n, s;
    cin >> n;
    int max = -1;
    for(int i = 1; i<=n; i++){
        cin >> s;
        if(s > max){
            max = s;
        }
    }
    cout <<  max << endl;
}
```
a031. 山六九之旅 -- 板橋高中教學題
```cpp= 
#include<iostream>
using namespace std;
int main(){
    int a;
    cin>>a;
    if(a>=60){
      cout<<"399";
      }
    else if(18<=a&&a<60){
      cout<<"890";
      }
    else if(12<=a&&a<18){
      cout<<"790";
      }
    else if (6<=a&&a<12){
      cout<<"590";
      }
    else{
      cout<<"0";
    }
}
```
a032. 班際籃球賽 – 板橋高中教學題
```cpp=
#include <iostream>
using namespace std;
int time(int n){
  if (n == 1){
      return 0;
  }
  else if(n%2==0){
    return n / 2 + time(n/2);
  }
  else{
      return n / 2 + time(n / 2 + 1);
    }
}
int main() {
  int n;
  cin>>n;
  int t=time(n);
  cout<<t; 
}
```
a033. hello, world
```cpp=
#include<iostream>
using namespace std;
int main(){
  cout <<  "hello, world" ;
}
```
a034. 我愛偶數
```cpp=
//將 a,b 調整成偶數 (a 如果是奇數 + 1,b 如果是奇數 - 1)，計算 2 個偶數間的偶數
#include<iostream>
using namespace std;
int main(){
  int a,b,c;
  cin>>a>>b;
  cout<<((b - (b%2) )-(a + (a%2) ))/2+1;
}
```
a035. 伏林的三角地
```cpp=
#include<iostream>
using namespace std;
int Heron(int a,int b,int c){
  int s=(a+b+c)/2;
  return (s*(s-a)*(s-b)*(s-c));
}
int main(){
  float a,b,c;
  cin>>a>>b>>c;
  cout<< Heron(a,b,c);
}
```
a036. 我也愛偶數 -- 板橋高中教學題
```cpp=
#include <iostream>
using namespace std;
int main() {
  int a,b;
  cin>>a>>b;
  int t=0;
  for (int i=a;i<=b;i++){
    if(i%2==0){
      t=t+i;
    }
  }
  cout<<t;
}
```
a037. 我也愛偶數 (swap 版) -- 板橋高中教學題
```cpp=
#include <iostream>
using namespace std;
int main() {
  int a,b;
  cin>>a>>b;
  int c=a;
  int t=0;
  if(a>b){
    a=b;
    b=c;
  }
  for (int i=a;i<=b;i++){
    if(i%2==0){
      t=t+i;
    }
  }
  cout<<t;
}
```
a038. 我不說髒話 -- 板橋高中教學題
```cpp= 
#include<iostream>
using namespace std;
int main(){
    int n, i;
    cin>>n;
  for(i=0;i<n;i++){
    cout<<"I don't say swear words!"<<endl;
  }   
}
```
a039. 小明的作業
```cpp=
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
  int a,b,c;
  int p=0;
  for(int i = 1; i<=5; i++){
    cin>>a>>b>>c;
    int ar[3]={a,b,c};
    sort(ar,ar+3);
    if(ar[0]+ar[1]>ar[2]){
      p=p+1;
      }
  }
  cout<< p;
}
```
a040. 文文的求婚 (三) -- 板橋高中教學題
```cpp=
#include <iostream>
using namespace std;
int main() {
  int a,b;
  cin>>a>>b;
  int t=0;
  for (int i=a;i<=b;i++){
    if(i%4==0&&i%100!=0){
        t=t+1;;  
    }
    else if(i%400==0){
      t=t+1;;  
    }
      
    }
  cout<<t;
}
```
a042. 買鉛筆 -- 板橋高中教學題
```cpp= 
#include<iostream>
using namespace std;
int main(){
    int a;
    cin>>a;
    cout<<a*5-10*(a/12);
}
```
a043. 棄保效應 -- 板橋高中教學題
```cpp=
#include <iostream>
using namespace std;
int main() {
  long long int a,b,c;
  while(cin>>a>>b>>c){
    if(c>b && c>a && c>a+b){ //c最大
      cout<<"C"<<endl;
    }
    else if (c>b && c>a && c<a+b){
      if(a>b){
        cout<<"A"<<endl;
      }
      else{
        cout<<"B"<<endl;
      }
    }
    if(b>c && b>a && b>a+c){ //b最大
      cout<<"B"<<endl;
    }
    else if (b>c && b>a && b<a+c){
      if(a>c){
        cout<<"A"<<endl;
      }
      else{
        cout<<"C"<<endl;
      }
    }
    if(a>b && a>c && a>c+b){ //a最大
      cout<<"A"<<endl;
    }
    else if (a>b && a>c && a<c+b){
      if(b>c){
        cout<<"B"<<endl;
      }
      else{
        cout<<"C"<<endl;
      }
    }
  }
}
```
a044. 蛋糕師傅
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    int make=0,bake=0;
    int o,m,b;
    for(int i=0;i<n;i++){
    	cin>>o>>m>>b;
    	if(o>make){
    		make=o+m;
    	}else{
    		make+=m;
    	}
    	if(make>bake){
    		bake=make+b;
    	}else{
    		bake+=b;
    	}
    	cout<<bake<<'\n';
    }
}
```
a054. 出來打球
```cpp=
#include<iostream>
using namespace std;
long long J(int n,int N){
    if(n<=N){
        return n*J(n+1,N);
    }
    else{
        return 1;
    }
}
int main(){
    int n,r;
    cin>>n>>r;
    int N=n;
    n=n-r+1;
    cout<<J(n,N);
}//nFr
```
a057. 牛肉萬歲
```cpp=
#include <iostream>
using namespace std;
int main(){
  int t;
  cin>>t;
  for(int j=0;j<t;j++){
    int n;
    cin>>n;
    int cnt=0;
    for(int i=2;i<n;i++){
      if(n%i==0){
        cnt++;
      }
      if(cnt>0){
        break;
      }
    }
    if(cnt==0 && n !=1){
      cout<<"Yes"<<endl;
    }
    else{
      cout<<"No"<<endl;
    }
  }  
  return 0;
}
```
a058. 請支援找零
```cpp=
#include <iostream>
using namespace std;
int main(){
    int a,money,c50,c10,c5,c1;
    cin >> a;
    money = 100-a;
    c50 = money/50;
    money = money%50;
    c10 = money/10;
    money = money%10;
    c5 = money/5;
    money = money%5;
    c1 = money;
    cout << c50 <<" "<< c10 <<" "<< c5 <<" "<< c1;
}
```
a059. 請支援找零－找到沒零
法一
```cpp=
#include<iostream>
using namespace std;
int main(){
  int a,n,money,c50,c10,c5,c1;
  cin >> a >>n;
  money = 100-a;
  if(n==50){
    c10 = money/10;
    money = money%10;
    c5 = money/5;
    money = money%5;
    c1 = money;
    cout << 0 <<" "<< c10 <<" "<< c5 <<" "<< c1;
  }
  if(n==10){
    c50 = money/50;
    money = money%50;
    c5 = money/5;
    money = money%5;
    c1 = money;
    cout << c50 <<" "<< 0 <<" "<< c5 <<" "<< c1;
  }  
  if(n==5){
    c50 = money/50;
    money = money%50;
    c10 = money/10;
    money = money%10;
    c1 = money;
    cout << c50 <<" "<< c10 <<" "<< 0 <<" "<< c1;
    }
}
```
法二
```cpp=
#include<iostream>
using namespace std;
int main(){
  int a,n,money;
  cin >> a >>n;
  money = 100-a;
  int c[4]={};
  int d[4]={50,10,5,1};
  for(int i=0;i<4;i++){
    if(n!=d[i]){
      c[i] = money/d[i];
      money=money%d[i];
    }
    cout<<c[i]<<" ";
  }
}
```
a060. 三角行不行
```cpp=
#include <iostream>
using namespace std;
int main(){
    int a,b,c;
  cin >> a >> b >> c;
  if(a+b>c && b+c>a && a+c>b){
  cout << "Yes" << endl;
  }
  else{
  cout << "No" << endl;
  }
} 
```
a061. 振興三倍券到底...省了多少錢
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n;
  cin>>n;
  int seven=n+(n/500)*500+((n%500)/200)*100;
  int hi=n+(n/500)*200;
  int ok=n+(n/500)*100+((n%500)/200)*20;
  cout<<seven<<endl<<hi<<endl<<ok;
}
```
a062. 這個月有幾天
```cpp=
#include<iostream>
using namespace std;
int main(){
    int a;
    cin>>a;
    if(a==2){
      cout<<"28";
      }
    else if(a%2==0&&a<8){
      cout<<"30";
      }
    else if(a%2!=0&&a>8){
      cout<<"30";
      }
    else{
      cout<<"31";
    }
}
```
a063. 考拉茲的猜想
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  cin>>n;
  while(n!=1){
    cout<<n<<endl;
    if (n%2==0){
      n=n/2;
    }
    else {
      n=(3*n)+1;
    }
  }
  cout<<"1"<<endl;
}
```
a064. 最大公因數
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main(){
  int a,b,c;
  cin>>a>>b>>c;
  int gcd=1;
  int p=2;
  while(p<=a && p<=b && p<=c){
    while(a%p==0 && b%p==0 && c%p==0){
      a=a/p;
      b=b/p;
      c=c/p;
      gcd=gcd*p;
    }
    p++;
  }
  cout<<gcd;
  return 0;
}
```
a065. RD的危機
```cpp=
#include <iostream>
using namespace std;
int main(){
  int t;
  cin>>t;
  for(int j=0;j<t;j++){
    int n;
    cin>>n;
    int cnt=0;
    for(int i=2;i*i<=n;i++){
      if(n%i==0){
        cnt++;
      }
      if(cnt>0){
        break;
      }
    }
    if(cnt==0 && n !=1){
      cout<<1;
    }
    else{
      cout<<0;
    }
  }  
  return 0;
}
//a057
```
a066. 今年的第幾天
```cpp=
#include<iostream>
using namespace std;
int main(){
  int m,d;
  int a[13]={0,0,31,59,90,120,151,181,212,243,273,304,334};
  cin>>m>>d;
  cout<<a[m]+d;
}
```
a068. 三隊拚輸贏
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n;
  int maxn=-1;
  int w=-1;
  char who[3]={'A','B','C'};
  for (int i=0;i<3;i++){
    cin>>n;
    if(n>maxn){
      maxn=n;
      w=i;
    }
  }
  cout<<who[w];
}
```
a072. 啊就階乘，簡單吧>.0
```cpp=
#include <bits/stdc++.h>
using namespace std;
int J(int n){
  if(n==0){
    return 1;
  }
  else{
    return n*J(n-1);
  }
}
int main() {
  int n;
  cin>>n;
  cout<<J(n);
}
  
```
a077. 深水炸彈
```cpp=
#include <iostream>
using namespace std;
int main() {
  int a,b,c,d,e,f,g;
  cin>>a>>b>>c>>d>>e>>f>>g;
  int w=a*b*d;//原本的水
  int v=e*f*g;//磚塊
  int ans=(w+v)/(a*b);//後來
  if(a*b==e*f && g>=c){ //完全密合導致沒水
    ans=0;
  }
  else if(d==0){//本來就沒水
    ans=0;
  }
  else if(g>ans){//凸出來但有水
    ans=(a*b*d)/((a*b)-(e*f));
  }
  if(ans>c){ //溢出來
    ans=c;
  }
  cout<<ans;
}
```
a078. 我討厭偶數
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n;
  cin>>n;
  while(n%2==0){
    n=n/2;
  }
  cout<<n;
}
```
a084. 偉晉的考驗
```cpp=
#include<iostream>
using namespace std;
int J(int n){
  if(n==0){
    return 1;
  }
  else{
    return n*J(n-1);
  }
}
int main(){
	int a,b;
	cin>>a>>b;
	int c=J(a)/(J(b)*J(a-b));
	cout<<c;
}
```
```cpp=
#include<iostream>
using namespace std;
int C(int n,int r){
	if(r==0||n==r){
		return 1;
	}
	return C(n-1,r)+C(n-1,r-1);
}
int main(){
	int n,r;
	cin>>n>>r;
	cout<<C(n,r);
}
```
a087. 在家中的美勞課
```cpp=
#include<iostream>
#include<math.h>
using namespace std;
int main(){
	int n,m;
	cin>>n>>m;
	if(n>=sqrt(m)*4){
		cout<<"yes";
	}
	else{
		cout<<"no";
	}
}
```
a091. 括號配段[中小版]
```cpp=
#include <iostream>
#include <stack>//堆疊引入的函式庫
using namespace std;
int main(){
	int n;
	cin>>n;
	string str;
	cin >> str;
	stack<char> s;
	int cnt = 0;  // 記錄式子中有幾對括號
  
	for(int i = 0; i < n; i++){
		if(str[i] == '(' || str[i] == '[')  // 遇到左括弧，一律推入堆疊
      		s.push(str[i]);
      		
    	else{ // 遇到右括弧
		if(!s.empty()){  // 堆疊不是空的，才能移走一個左括弧
			if((str[i] == ')' && s.top()=='(') || (str[i] == ']' && s.top()=='[')){
	        	s.pop();
	        	cnt++;				
			}
		}
		else{  // 否則，式子中的括號必定有誤
        	cnt = 0;
        break;
      }
    } 
  }
  // 堆疊裡可能殘留剩下的左括弧！
  // 堆疊空的才合理
  if(s.empty()&&cnt!=0) cout <<"yes "<< cnt << endl;
  else  cout <<"no "<< 0 << endl;
  return 0;
}

```
a095. 一起玩數織
```cpp=
#include <iostream>
using namespace std;
const int MAXN=155;
int main(){
  int n=0;
  int l[MAXN]={};
  while(cin>>l[n]){//ctrl+D 結束
    n++;
  }
  l[n]=2;
  n++;
  int cnt =1;
  for(int i=1;i<n;i++){
    if(l[i]==l[i-1]){//跟前面一->直接+1
      cnt++;
    }
    else{ //跟前面不一樣->結算重新開始
      cout<<cnt<<" ";
      cnt=1;
    }
  }
  cout<<endl;
}
```
a096. 大物流時代
```cpp=
#include <iostream>
using namespace std;
int main(){
    int n;
    cin >> n;
    if(n%7==0){
    	cout << "Boss" << endl;
    }
    if(n%3==0){
    	cout << "Mei" << endl;
    }
    if(n%2==0){
    	cout << "Peter" << endl;
    }
    if(n%7!=0 && n%3!=0 && n%2!=0){
    	cout << "Boss" << endl;
    }
}
```
a100. 數數數
```cpp=
#include <iostream>
using namespace std;
int main(){
    int a,n,d;
    cin >> a >> n >> d;
    for(int i=a;i<=n;i+=d){
    	cout << i << endl;
    }
}
```
a103. 小考總分
```cpp=
#include <iostream>
using namespace std;
int main() {
  int n ;
  cin>>n;
  int s;
  int t=0;
  for(int i=0;i<n;i++){
    cin>>s;
    t=t+s;
  }
  cout<<t;
}
```
a104. 列印成績單
```cpp=
#include <iostream>
using namespace std;
int main() {
  int n ;
  cin>>n;
  int yes[11]={};
  int num,score;
  for(int i=1;i<=n;i++){
    cin>>num>>score;
    yes[num]=score;
  }
  for(int i=1;i<=10;i++){
    cout<<yes[i]<<"\n";
  }
}
```
a107. 誰沒交作業
```cpp=
#include <iostream>
using namespace std;
int main() {
  int n ;
  cin>>n;
  int yes[11]={};
  int num,score;
  for(int i=1;i<=n;i++){
    cin>>num>>score;
    yes[num]=num;
  }
  for(int i=1;i<=10;i++){
    if(yes[i]==0){
      cout<<i<<"\n";
    }
  }
}
```
a108. 作業亂了
```cpp=
#include <iostream>
using namespace std;
int main() {
  int yes[11]={};
  int score;
  for(int i=10;i>=1;i--){
    cin>>score;
    yes[i]=score;
  }
  for(int i=1;i<=10;i++){
      cout<<i<<" "<<yes[i]<<endl;
  }
}
```
a109. 小瑛拼單字
```cpp=
#include <iostream>
using namespace std;
int main() {
  int n ;
  cin>>n;
  char a[10000];
  char s;
  for(int i=0;i<n;i++){
    cin>>s;
    a[i]=s;
  }
  for(int i=n-1;i>=0;i--){
      cout<<a[i];
  }
}
```
a110. 存款提款
```cpp=
#include <iostream>
using namespace std;
int main() {
  int n ;
  cin>>n;
  int how[505];
  int md[505];//定存
  int md_t=0;
  int mh[505];//活存
  int mh_t=0;
  int money;
  for(int i=0;i<n;i++){
    cin>>how[i]>>money;
    if(how[i]==0){
      mh[mh_t]=money;
      mh_t++;
    }
    else{
      md[md_t]=money;
      md_t++;
    }
  }
  for(int i=0;i<mh_t;i++){
      cout<<"活存 "<<mh[i]<<endl;
  }
  for(int i=0;i<md_t;i++){
      cout<<"定存 "<<md[i]<<endl;
  }
}
```
a111. 自助收銀機
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n,t; //n:物品單價，t:總價
  t=0;
  while(cin>>n&&n!=-1){
    t=t+n;
  }
  cout<<t;
}
```
a112. 杰克‧A‧布萊克
```cpp=
#include<iostream>
using namespace std;
int main(){
    int s=0;
    int card =0;
    cin >>card;
    s+=card;
    while(s<=16){
    	cin >> card;
    	s+=card;
    }
    if(s>21){
    	cout << "Lose" <<endl;
    }
    else{
    	cout << s <<endl;
    }
}
```
a113. 最小公倍數
```cpp=
#include<iostream>
using namespace std;
int main(){
  long long int a; //因為數字超過2147483648時不能用int存所以用long long
  long long int b;
  cin >>a>>b;
  long long int c=a; //變數c 最小公倍數
  while (c%b!=0){ //c整除b時為最小公倍數，否則遞加a
    c=c+a; //a以倍數放大
  }  
  cout<<c;   
}
```
a118. 芒果季
```cpp=
#include <iostream>
using namespace std;
int main() {
  int n ;
  cin>>n;
  int m;
  int bad_m[100000];
  int bt=0;//badtotal
  while(m!=-1){
    cin>>m;
    if(m<60 && m!=-1){
      bad_m[bt]=m;
      bt++;
    }
  }
  if(bt==0){
    cout<<"All pass"<<endl;
  }
  else{
    for(int i;i<bt;i++){
      cout<<bad_m[i]<<endl;
    }
  }
}
```
a121. 智慧叫貨販賣機
```cpp=
#include <iostream>
using namespace std;
int main() {
  int n ;
  cin>>n;
  int how_many[25]={};
  for(int i=1;i<=n;i++){
    cin>>how_many[i];
  }
  int buy;
  while(buy!=-1){
    cin>>buy;
    if(buy==-1){
      break;
    }
    else{
      how_many[buy]--;
    }
  }
  for(int i=1;i<=n;i++){
    if(how_many[i]<3){
      cout<<i<<" ";
    }
  }
}
```
a122. 地頭蛇
```cpp=
#include <iostream>
using namespace std;
int main() {
  int A[105][105]={0};
  int r,c;
  cin>>r>>c;
  for (int i=1;i<=r;i++){
    for (int j=1;j<=c;j++){
      cin>>A[i][j];
    }
  }
    for (int i=1;i<=r;i++){
      for (int j=1;j<=c;j++){
        if (A[i][j]>A[i-1][j] and A[i][j]>A[i+1][j] and A[i][j]>A[i][j-1] and A[i][j]>A[i][j+1]){
          cout<<A[i][j]<<endl;
        }
      }
    }
}
```
a123. 小老師的困擾
```cpp=
#include<iostream>
using namespace std;
int main(){
  int t,n;
  cin>>t>>n;
  int s[55][55]={};  
  for(int i=0;i<t;i++){
    for(int j=0;j<n;j++){
      cin>>s[i][j];
    }
  }
  for(int i=0;i<n;i++){
    int ans=0;
    int min=101;
    for(int j=0;j<t;j++){
      for(int k=0;k<t;k++){
        if(s[k][i]<=min){
          min=s[k][i];
        }
      }
      ans+=s[j][i];
    }
    cout<<(ans-min)/(t-1)<<" ";
  }
}

```
a124. 西洋棋彩繪 
```cpp=
#include <iostream>
using namespace std;
int main() {
  int h,w,k;
  cin>>h>>w>>k;
  int board[505][505]={};
  int di[8]={-1,+0,+1,+0,-1,-1,+1,+1};
  int dj[8]={+0,-1,+0,+1,-1,+1,-1,+1};
  while(k--){
    int t,c,r;
    cin>>t>>c>>r;
    board[r][c]=1;
    if(t==0){
      continue;
    }
    else if(t==1){
      for(int k=0 ;k<8;k++){
        int i=r+di[k];
        int j=c+dj[k];
        while(i>=0 and i<h and j>=0 and j<w){
          if(board[i][j]==1){
            break;
          }
          board[i][j]=1;
          i+=di[k];
          j+=dj[k];
        }
      }
    }
    else if(t==2){
      for(int k=4 ;k<8;k++){
        int i=r+di[k];
        int j=c+dj[k];
        while(i>=0 and i<h and j>=0 and j<w){
          if(board[i][j]==1){
            break;
          }
          board[i][j]=1;
          i+=di[k];
          j+=dj[k];
        }
      }
    }
    else if(t==3){
      for(int k=0 ;k<4;k++){
        int i=r+di[k];
        int j=c+dj[k];
        while(i>=0 and i<h and j>=0 and j<w){
          if(board[i][j]==1){
            break;
          }
          board[i][j]=1;
          i+=di[k];
          j+=dj[k];
        }  
      }
    }
  }
  for(int i=0;i<h;i++){
    for(int j=0;j<w;j++){
      cout<<board[i][j]<<" ";
    }
    cout<<endl;
  }
}
```
a125. 紙牌配對
```cpp=
#include <iostream>
using namespace std;
int main() {
  int n,a[100001]={};
  cin>>n;
  for (int i=0;i<n;i++){
    cin>>a[i];
  }
  int po[101]={};
  for(int p=1 ;p<=100;p++){
    po[p]=-1;
  }
  for(int i=0 ;i<n;i++){
      if(po[a[i]]==-1){
        po[a[i]]=i;
      }
      else{
        cout<<i<<" "<<po[a[i]]<<" "<<a[i]<<endl;
        po[a[i]]=-1;
      }
  }
}
```
a127. 騎士的巡禮-1
```cpp=
#include<iostream>
using namespace std;
const int MAXN=105; //const:固定的 -> 變成常數
const int MAXM=MAXN*MAXN;
int main(){
  int n,m;
  cin>>n>>m;
  int b[MAXN][MAXN]={};
  int r[MAXM],c[MAXM];
  for(int i=1;i<=m;i++){
    cin>>r[i]>>c[i];
    b[r[i]][c[i]]=i*10000;
  }
  bool can_move[MAXM]={};
  int mi[9]={0,-2,-1,1,2,2,1,-1,-2};
  int mj[9]={0,1,2,2,1,-1,-2,-2,-1};
  int step=1;
  int alive=m;
  for (int i=1;i<=m;i++){
    can_move[i]=true;
  }
  while (alive>0){ //還沒結束的話
    for(int i=1;i<=m;i++){
      if(!can_move[i]){
        continue;
      }
      can_move[i]=false;
      for(int k =1 ;k<=8;k++){
        int nr=r[i]+mi[k],nc=c[i]+mj[k];
        if (nr>=0 && nr<n && nc>=0 && nc<n && b[nr][nc]==0){
          r[i]=nr;
          c[i]=nc;
          b[r[i]][c[i]]=i*10000+step;
          can_move[i]=true;
          break;
        }
      }
      if(!can_move[i]){
        alive--;
      }
    }
    step++;
  }
  for (int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      cout<<b[i][j]<<" \n"[j==n-1];
    }
  }
}
```
a129. 自動平衡蹺蹺板
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n,w[2050];
  cin>>n;
  for(int i=0;i<n;i++){
    cin>>w[i];
  }
  int finish=0;
  int t=0;
  while(finish==0){
    for(int i=0;i<n;i++){
    int r=0;
    int l=0;
    for(int k=0;k<n;k++){
      if(k<i){
        r+=w[k]*(i-k);
      }
      else if(k>i){
        l+=w[k]*(k-i);
      }
    }
    if(r==l){
      finish=1;
      for(int m=0;m<n;m++){
        if(m==i){
          cout<<"v"<<" ";
        }
        else{
          if(m==n-1){
            cout<<w[m];
          }
          else{
            cout<<w[m]<<" ";
          }
        }
      }
    }
  }
  swap(w[t],w[n-1-t]);
  t++;
  }
}
```
a145. 競技場
```cpp=
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=1e5+5;
int main(){
	int n;
	cin>>n;
	int A[MAXN]={},B[MAXN]={};
	for(int i=0;i<n;i++){
		cin>>A[i];
		B[i]=A[i];
	}
	sort (A,A+n);
	for(int i=0;i<n;i++){
		int l=0,r=n-1;
		while(l<r){//跑到剩一個候選為止
			int mid=(l+r+1)/2;
			if(A[mid]==B[i]){
				l=mid;
			}
			else if(A[mid]<B[i]){
				l=mid+1;
			}
			else{
				r=mid-1;
			}
		}
		cout<<n-l<<" ";
	}
}
```
a158. 長腿阿馨爬樓梯
```cpp=
#include<iostream>
using namespace std;
int stair(int n){
	if(n==1){
		return 1;
	}
	if(n==2){
		return 2;
	}
	if(n==3){
		return 4;
	}
	return stair(n-1)+stair(n-2)+stair(n-3);
}
int main(){
	int n;
	cin>>n;
	cout<<stair(n)<<endl;
}
```
法二
```cpp=
#include<iostream>
using namespace std;
const int MAXN=100;
int dp[MAXN]={0,1,2,4};
int stair(int n){
	if(dp[n]!=0){
		return dp[n];
	}
	dp[n]=stair(n-1)+stair(n-2)+stair(n-3);
	return dp[n];
}
int main(){
	int n;
	cin>>n;
	cout<<stair(n)<<endl;
}
//用list存版
//動態規劃(dp)，遞迴+表格
```
法三
```cpp=
#include<iostream>
using namespace std;
const int MAXN=100;
int dp[MAXN]={0,1,2,4};
int main(){
	int n;
	cin>>n;
	for(int i=4;i<=n;i++){
		dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
	}
	cout<<dp[n]<<endl;
}
//用for迴圈 : Bottom up
```
a160. 小妮爬樓梯（總次數上限版）
```cpp=
#include<iostream>
using namespace std;
int stair(int n,int k){
	if(n==1){
		return 1;
	}
	if(n==2){
		if(k==0){
			return 1;
		}
		else{
			return 2;
		}	
	}
	if(k==0){
		return stair(n-1,k);
	}
	return stair(n-1,k)+stair(n-2,k-1);
}
int main(){
	int n,k;
	cin>>n>>k;
	cout<<stair(n,k)<<endl;
}
```
a161. 小湊爬樓梯（連續次數上限版）
```cpp=
#include<iostream>
using namespace std;
int stair(int n,int k,int K){
	if(n==1){
		return 1;
	}
	if(n==2){
		if(k==K){
			return 1;
		}
		else{
			return 2;
		}	
	}
	if(k==K){
		return stair(n-1,0,K);
	}
	return stair(n-1,0,K)+stair(n-2,k+1,K);
}
int main(){
	int n,K;
	cin>>n>>K;
	cout<<stair(n,0,K)<<endl;
}
```
a167. 算平均(一行輸入版)
```cpp=
#include<iostream>
using namespace std;
int main(){
    float n;
    cin>>n;
    float s;
    float t=0;
    for (int i=0;i<n;i++){
        cin>>s;
        t=t+s;
    }
    cout<<t/n;
}
```
a170. 單科平均分數
```cpp=
//二維陣列
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  float t;
  string b;
  t=0;
  float a[4][5]={};
  for (int i=0;i<4;i++){
    for(int j=0;j<5;j++){
      cin>>a[i][j];
    }
  }
  cin>>b;
  if(b=="c"){
    t=a[0][0]+a[1][0]+a[2][0]+a[3][0];
  }
  if(b=="e"){
    t=a[0][1]+a[1][1]+a[2][1]+a[3][1];
  }
  if(b=="m"){
    t=a[0][2]+a[1][2]+a[2][2]+a[3][2];
  }
  if(b=="s"){
    t=a[0][3]+a[1][3]+a[2][3]+a[3][3];
  }
  if(b=="n"){
    t=a[0][4]+a[1][4]+a[2][4]+a[3][4];
  }
  cout<<float(t/4);
}
```
a172. 法國代購 
```cpp=
#include<iostream>
using namespace std;
int main(){
  int t,f;
  cin>>f;
  t=f+6;
  if(t>=24){
    cout<<t-24;
  }
  else{
    cout<<t;
  }
}
```
a173. 預算控制
```cpp=
#include<iostream>
using namespace std;
int main(){
    int n,m;
    cin>>n;
    int t=0;
    for(int i=0;i<n;i++){
        cin>>m;
        t+=m;
    }
    cout<<t/n;
}
```
a176. 自動回覆機器人
```cpp=
#include<iostream>
using namespace std;
int main(){
  string n;
  getline(cin,n);
  cout<<n<<" 你好"<<endl<<"你的暱稱將設為 "<<n;
}
```
a177. 小美的年齡
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int h,d;
  cin>>d;
  h=d*4;
  cout<<(d/10)+((h%10)*10);
  return 0;
}
```
a180. 分組
```cpp=
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
  int n ;
  cin>>n;
  if(n%3==0){
    cout<< 3;
  }
  else if (n%3==2){
    cout<<2;
  }
  else if (n%3==1){
    cout<<1;
  }
}
```
a181. 請輸入預設密碼
```cpp=
#include<iostream>
using namespace std;
int main(){
  string pwd;
  cin>>pwd;
  if(pwd=="000000"){
    cout<< "登入成功";
   }
  else {
    cout<< "密碼錯誤";
   }
}
```
a182. 判斷正數
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n ;
  cin>>n;
  if(n>0){
    cout<< "yes";
  }
  else{
    cout<<"no";
  }
}
```
a184. 百貨周年慶
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n ;
  cin>>n;
  if(n>10000){
    cout<< "1000";
  }
  else if (n>5000){
    cout<<"600";
  }
  else if (n>2000){
    cout<<"200";
  }
}
```
a185. 籃球明星賽
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int M,W,m=0,w=0;
  for(int i=0;i<2;i++){
    cin>>M>>W;
    if(M>W){
      m=m+1;
    }
    else if(M<W){
      w=w+1;
    }
  }
  if(m==w){
    cout<<"平手";
  }
  else if(m>w){
    cout<<"夢幻隊";
  }
  else if(m<w){
    cout<<"王者隊";
  }
  return 0;
}
```
a186. 調整總分
```cpp= 
#include<iostream>
#include<math.h>
using namespace std;
int main(){
  int c=0;
  int n,s,a[1000];
  cin>>n;
  for(int i=1;i<=n;i++){
    cin>>a[i];
  }
  for(int i=1;i<=n;i++){
    cout<<int( sqrt(a[i])*10)<<endl;
  }
}
```
a187. 清倉價格	
```cpp=
#include<iostream>
using namespace std;
int main(){
  int c=0;
  int n,a[1000];
  cin>>n;
  for(int i=1;i<=n;i++){
    cin>>a[i];
  }
  for(int i=1;i<=n;i++){
    cout<<int((a[i])*0.64)<<endl;
  }
}
```
a189. 瓜甜?理下!
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int w;
  cin>>w;
  if(w>=500){
    cout<<"A+";
    }
  else if(w>=400){
    cout<<"A";
    }
  else if(w>=200){
    cout<<"B";
    }
  else {
    cout<<"C";
    }
  return 0;
}
```
a209. 二分搜尋-終極密碼
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n,ans;
  cin>>n>>ans;
  int k=(1+n)/2;
  int finish=0;
  int t=1;
  int low=0,high=n+1;
  while (finish==0){
    if (k>ans){
      cout<<k<<" is too big"<<endl;
      high=k;
      k=(low+high)/2;
      t++;
    }
    else if(k<ans){
      cout<<k<<" is too small"<<endl;
      low=k;
      k=(low+high)/2;
      t++;
    }
    else{
      finish=1;
      cout<<k<<" is correct"<<endl;
    }
  }
  cout<<t;
}
```
a214. 最少交換次數
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n;
  cin>>n;
  int s[105]={};
  for(int i=0;i<n;i++){
    cin>>s[i];
  }
  int max;
  int t=0;
  for(int i=0;i<n-1;i++){
    max=i;
    for(int j=i+1;j<n;j++){
      if(s[j]>s[max]){
        max=j;
      }
    }
    if(max!=i){
      swap(s[i],s[max]);
      t++;
    }
  }
  cout<<t<<'\n';
  for(int i=0;i<n;i++){
    cout<<s[i]<<' ';
  }
}
```
a224. 四面體數
<法一> 數學解
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n;
  cin>>n;
  cout<<((n+1)*(n+2)*n)/6;
}
``` 
a225. 選擇排序法之跟著影片做
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n,k;
  cin>>n>>k;
  int num[105]={};
  for(int i=0;i<n;i++){
    cin>>num[i];
  }
  for(int i=0;i<k;i++){
    for(int j=i+1;j<n;j++){
      if(num[j]<num[i]){
      	swap(num[i],num[j]);
      }
    }
  }
  for(int i=0;i<n;i++){
    cout<<num[i]<<' ';
  }
}
```
a226. 升旗妙事
```cpp=
#include<iostream>
#include <algorithm>
using namespace std;
int main(){
  int n;
  cin>>n;
  int h[105]={};
  for(int i=0;i<n;i++){
    cin>>h[i];
  }
  sort(h,h+n);
  int t=n;
  if(n%2!=0){
    t++;
  }
  for(int i=0;i<t/2;i++){
    if(i==n-i-1){
      cout<<h[i];
    }
    else{
      cout<<h[i]<<" "<<h[n-i-1]<<" ";
    }
  }
}
```
a230. 氣泡排序法—反序數量
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n;
  cin>>n;
  int num[105]={};
  for(int i=0;i<n;i++){
    cin>>num[i];
  }
  int t=0;
  for(int i=0;i<n-1;i++){
    for(int j=0;j<n-1-i;j++){
      if(num[j]<num[j+1]){
      	swap(num[j],num[j+1]);
      	t++;
      }
    }
  }
  cout<<t<<'\n';
  for(int i=0;i<n;i++){
    cout<<num[i]<<' ';
  }
}
```
a249. 二分搜尋法-陣列中搜尋
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n;
  cin>>n;
  int a[10005];
  for(int i=0;i<n;i++){
    cin>>a[i];
  }
  int f;
  cin>>f;
  int time=1;
  //↑ 輸入，↓ 處理
  int l=0,r=n-1;
  int found=0;
  while(l<=r){
    int now=(l+r+1)/2;
    if(a[now]==f){
      cout<<now+1<<endl<<time;
      found=1;
      break;
    }
    else{
      time++;
      if(a[now]<f){
        l=now+1;
      } 
      else{
        r=now-1;
      }
    }
  }
  if(found==0){
    cout<<"0"<<endl<<time-1;
  }
}
```
```
      0 1 2 3 4 5 6
陣列 [a b c d e f g]
現狀  l     n     r
太大          l n r
太小  l n r 
```
a271. 煩人的多項式習題
:::success
``pow`` : 次方運算，格式pow(x，y)
:::
```cpp=
#include<iostream>
#include<math.h>
using namespace std;
int main(){
    int n,x;
    cin>>n>>x;
    int ans=0;
    int num;
    for(int i=n;i>=0;i--){
        cin>>num;
        ans+=num*(pow(x,i));
    }
    cout<<ans;
}
```
a272. 三分搜尋法-終極密碼
```cpp=
#include<iostream>
using namespace std;
int main(){
  int l,r,ans;
  cin>>l>>r>>ans;
  int t=0;
  int finish=0;
  while (finish==0){
  	int d=(r-l)/3;
  	int mid1=l+d,mid2=r-d;
  	cout<<mid1<<" "<<mid2<<'\n';
  	if(mid1==ans || mid2==ans){
      finish=1;
      t++;
  	}
    else if (mid1>ans && mid2>ans){
      r=mid1-1;
      t++;
    }
    else if(mid1<ans && mid2<ans){
      l=mid2+1;
      t++;
    }
    else if(mid1<ans && mid2>ans){
    	l=mid1+1;
    	r=mid2-1;
    	t++;
    }
  }
  cout<<t;
}
```

# 競賽題庫
a050. pA 懼高症 -- CPTC2020
```cpp=
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=1e5+5;
int main(){
	int n,m,q;
	cin>>n>>m>>q;
	n=n*m;
	long long int A[MAXN]={};
	for(int i=0;i<n;i++){
		cin>>A[i];
	}
	sort (A,A+n+1);
	for(int i=0;i<q;i++){
		long long int h;
		cin>>h;
		int l=0,r=n;
		while(l<r){//跑到剩一個候選為止
			int mid=(l+r+1)/2;
			if(A[mid]>h){
				r=mid-1;
			}
			else{
				l=mid;
			}
		}
		cout<<l<<endl;
	}
}
```
a099. 供五停二 -- 110年景美女中學科能力競賽
```cpp=
#include <bits/stdc++.h> //萬用函式庫
using namespace std;
int main() {
  ios::sync_with_stdio(0);//讓程式跑更快(以下2行)
  cin.tie(0);
  int n,m,d;
  string a[10];
  int month[20]={0,0,31,59,90,120,151,181,212,243,273,304,334};
  cin >> n;
  for (int i=0; i<n; i++){
    cin>>m>>d;
    if ((month[m]+d)%7+4==9||(month[m]+d)%7+4==10){
      a[i]="A";
    } 
    else if((month[m]+d)%7+4==4||(month[m]+d)%7+4==5) {
      a[i]="B";
    }
    else{
      a[i]="No";
    }
  }
  for (int j=0;j<n;j++){
    cout <<a[j]<<endl;
  }
  return 0;
}
```
s003. 3. 飲料點餐
```cpp=
#include<iostream>
#include<algorithm>
using namespace std;
int use(int n,int c[],int m,int k){
	if(n==0){
		return 1;
	}
	else{
		int ans=0;
		for(int i=0;i<k;i++) {
			if(m>=c[i]){
				ans+=use(n-1,c,m-c[i],k);
			}
		}
		return ans;
	}
}
int main(){
	int n,k,m;
	cin>>n>>k>>m;
	int c[10];
	for(int i=0;i<n;i++){
		cin>>c[i];
	}
	sort(c,c+k);
	cout<<use(n,c,m,k)<<endl;
}
//遞迴
```
s006. 1. 蝦寶的命名 - 112景美女中資訊學科能力競賽
```cpp=
#include <iostream>
using namespace std;
int main() {
  int k,j;
  cin>>k>>j;
  int n;
  cin>>n;
  for (int i=0;i<n;i++){
    int b,c;
    cin>>b>>c;
    if((b+c)%k==0 && b%j!=0 && c%j!=0){
      cout<<"Yes"<<endl;
    }
    else{
      cout<<"No"<<endl;
    }
  }
}
```
# Toi 練習賽
a148. 捕魚 (Fishing)
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  int X,Y,N,A,B,min=1000000,mina,minb;
  cin>>X>>Y>>N;
  for(int i=0;i<N;i++){
    cin>>A>>B;
    if((A-X)*(A-X)+(B-Y)*(B-Y)<min){
      min=(A-X)*(A-X)+(B-Y)*(B-Y);
      mina=A;
      minb=B;
    }
  }
  cout<<mina<<" "<<minb;
}
```
a149. 計程車(Taxi) -- TOI練習賽202203新手組3.
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int K,W,S,E;//公里數、車輛延滯時間(以分鐘為單位)、乘客上車以及下車的時間點(以小時為單位)。
  int money=0;
  cin >>K>>W>>S>>E;
  int sum=0;
  if(K>=2){
      sum =sum+20+(K-2)*5;
  }
  else{
      sum =sum+20;
  }
  sum=sum+W*60/120*5;
  while(E>=19 && E<=23 && E>S){
      sum+=(E+E-1)/(2*1.0)*10;
      E=E-1;
  }
  cout<<(sum);
  return 0;
}
```
a150: 躲避球 (Dodgeball)--『toi練習賽』
```cpp=
#include<iostream>
using namespace std;
int main(){
  int X,R,V,N,P,S;
  cin >> X >> R >>V>>N;
  for(int i = 1; i<=N; i++){
    cin>> P >> S;
    if(X==P){
      X=X-15;
    }
    else if((X+R)>=P&&(X-R)<=P&&V>=S){
      X=P;
    }
    else if((X+R)>=P&&(X-R)<=P&&V<S){
      if(X<P){
        X=X-15; 
      }
      else{
        X=X+15;
      }      
    }
  }
  cout<<X;
}
```
a152: 岩石觀察 （Stones）–『toi練習賽』
```cpp=
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
  int n, stone[100],stone_origin[100],total=0,average=0,min=0,max=0,temp=0;
  cin >> n;
  for(int i=0;i<n;i++){
      cin >> stone[i];
      total=total+stone[i];
      stone_origin[i] = stone[i];
  }
  average = float(total/n);
  sort(stone,stone+n);
  min = stone[0];
  max = stone[n-1];
  temp = max - average;
  for(int j=0; j<n; j++){
      if (stone_origin[j] == min){
          cout << stone_origin[j] + temp;
      }
      else if (stone_origin[j] == max){
          cout << stone_origin[j] - temp;
      }
      else{
          cout << stone_origin[j];
      }
      if (j != n-1){
          cout << " ";
      }
  }  
  return 0;
}
```
a194. 戰備存糧 (Food) -- TOI練習賽202210新手組
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n,e;
  while(1==1){
    int day=0;
    cin>>n>>e;
    int total=n*e,s=n,now=total;
    if(n==0&&e==0){
      break;
    }
    else{
      while(now>0){
        if(s>0){
          now=now-s;
          s=n-(total-now)/e;
        }
        day++;
      }
      cout<<day<<endl;
    }
  }  
}
//a194
```
a211. 開心農場 (Farm)
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int N,X,Y,R,L,W=0,q=0;
  int totalx=0,totaly=0,x[105],y[105];
  cin>>N;
  for(int i=0;i<N;i++){
    cin>>x[i];
  }
  for(int i=0;i<N;i++){
    cin>>y[i];
  }
  cin>>R>>L;
  for (int i=0;i<N;i++){
    totalx=totalx+x[i];
    totaly=totaly+y[i];
    if (totalx>=R && totaly>=L){
      cout<<i+2;
      q=q+1;
      break;
   }
  }
  if(q==0){
    cout<<"-1";
  }
}
```
拍七(Seven)-2023 3月 TOI
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int S,E,B,K,t=0;
  cin>>S>>E>>B>>K;
  for(int i=S;i<=E;i++){
    if(i%B==0){ //倍數
      t=t+1;
    }
    else if(i%10==B){ //前面有B
      t=t+1;
    }
    else if((i/10)%10==B){ 
      t=t+1;
    }
    else if((i/100)%10==B){ 
      t=t+1;
    }
    if(t==K){
      cout<<i;
      break;
    }
  }
  if(t<K){
    cout<<"-1";
  }
}
```
鑿井取水 (water)-2023 3月 TOI
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int N,W,wat=0,use=0,M,X,a;
  cin>>N>>W;
  for(int i=1;i<=N;i++){
    cin>>M;
    wat=wat+W;
    for(int j=0;j<M;j++){
      cin>>X;
      use=use+X;      
    }
    wat=wat-use;
    if(wat<0){
      a=i;
      cout<<a;
      break;
    }
    use=0;
  }
  if(wat>=0){
    cout<<"-1";
  }
}
```
庫存清理 (Stock)-2023 3月 TOI
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int T,S,P,t=0,a;
  cin>>T>>S>>P;
  a=T;
  for(int i=1;i<=S;i++){
    if(T>=(a*0.8)){
      t=t+(P*0.5);      
    }
    else if(T>=(a*0.6)){
      t=t+(P*0.6);
    }
    else if(T>=(a*0.4)){
      t=t+(P*0.8);
    }
    else if(T>=(a*0.2)){
      t=t+(P*0.9);
    }
    T=T-1;
  }
  cout<<t;
}
```
成績分析 (Analysis)-2023 4月 TOI
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  int N,M;
  cin>>N>>M;
  int S[1005][1005]={};  
  for(int i=0;i<N;i++){
    for(int j=0;j<M;j++){
      cin>>S[i][j];
    }
  }
  int good_s=0,bad_s=0,progress=0,regress=0,max_p=0,max_r=0;
  for(int i=0;i<N;i++){
    for(int j=0;j<M-1;j++){
      if(S[i][j]-S[i][j+1]<0){
        progress=progress+S[i][j+1]-S[i][j];
        if(progress>max_p){
          good_s=i+1;
          max_p=progress;
        }
      }
      else{
        regress=regress+S[i][j]-S[i][j+1];
        if(regress>max_r){
          bad_s=i+1;
          max_r=regress;
        }
      }
    }
    progress=0;
    regress=0;
  }
  cout<<good_s<<endl<<bad_s;
}
```
分班 (Class)2023-4月 TOI
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  int N;
  cin>>N;
  int C[1005]={};
  int M[1005]={};
  int cC[1005],cM[1005],c=0,m=0;
  for(int i=0;i<N;i++){
    cin>>C[i];
  }
  for(int i=0;i<N;i++){
    cin>>M[i];
  }
  int a=0,b=0;
  for(int j=0;j<N;j++){
    if(C[j]-M[j]>0){
      cC[a]=j+1;
      c=c+1;
      a=a+1;
    }
    else{
      cM[b]=j+1;
      m=m+1;
      b=b+1;
    }
  }
  if(c==0){
    cout<<-1<<endl;
  }
  else{
    for(int i=0;i<a;i++){
      cout<<cC[i]<<" ";
    }
    cout<<endl;
  }
  if(m==0){
    cout<<-1<<endl;
  }
  else{
    for(int i=0;i<b;i++){
      cout<<cM[i]<<" ";
    }
  }
}
```
煲仔飯 (Clay Pot Rice)2023-10月 TOI
```cpp=
#include <iostream>
using namespace std;
int main() {
  int T,G,W,E,B;
  cin>>T>>G>>W>>E>>B;
  int time=G+W+E+B;
  if(time<=T){
    cout<<time;
  }
  else{
    cout<<"-1";
  }
}
```
烤肉 (BBQ)2023-10月 TOI
```cpp=
#include <iostream>
using namespace std;
int main() {
  int N,M,X,Y;
  cin>>N>>M>>X>>Y;
  int yes=0;
  for (int i=0;i<=M;i++){
    int B=i;
    int P=M-i;
    if(X*P+Y*B==N){
      cout<<P<<" "<<B;
      yes=1;
    }     
  }
  if(yes==0){
    cout<<"-1"<<" "<<"-1";
  }
}
```
超市排隊 (Supermarket)2023-10月 TOI
```cpp=
#include <iostream>
using namespace std;
int main() {
  int A,B,C;
  cin>>A>>B>>C;
  int ta=2*(A-1);
  int tb=2*(B-1);
  int tc=2*(C-1);
  int K;
  for (int i=0;i<A;i++){
    cin>>K;
    ta=ta+3*K;
    K=0;
  }
  for (int i=0;i<B;i++){
    cin>>K;
    tb=tb+3*K;
    K=0;
  }
  for (int i=0;i<C;i++){
    cin>>K;
    tc=tc+3*K;
    K=0;
  }
  if(ta<tb && ta<tc){
    cout<<"1"<<" "<<ta;
  }
  else if(tb<ta && tb<tc){
    cout<<"2"<<" "<<tb;
  }
  else{
    cout<<"3"<<" "<<tc;
  }
}
```
a263. 狼人殺 (Werewolves) -- TOI練習賽202311新手組第1題
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n;
  cin>>n;
  int a[20]={};
  int p=0;//平民
  int g=0;//神職
  int w=0;//狼人
  for(int i=1;i<=n;i++){
    cin>>a[i];
    if(a[i]==0){
      p++;
    }
    else if(a[i]==1){
      g++;
    }
    else{
      w++;
    }
  }
  int finish=0;
  int out=-1;
  while(out!=0){
    cin>>out;
    if(out==0){
      break;
    }
    if(a[out]==2){
      cout<<"Wrong";
      finish=1;
      break;
    }
    else{
      if(a[out]==0){
        p--;
      }
      else if(a[out]==1){
        g--;
      }
      else{
        w--;
      }
      a[out]=2;
    }
  }
  if(finish==0){
    if(w>0){
      cout<<"Werewolves";
    }
    else{
      cout<<"Townsfolk";
    }
  }
}
```
a264. 書房 (Study) -- TOI練習賽202311新手組第2題
```cpp=
#include<iostream>
using namespace std;
int main(){
  int n,m;
  cin>>n>>m;
  int a[1005]={};
  int b;
  for(int i=1;i<=n;i++){
    cin>>b;
    a[b]=i;
  }
  for(int i=1;i<=m;i++){
    cout<<a[i]<<" ";
  }
}
```
a265. 精靈王國 (Kingdom) -- TOI練習賽202311新手組第3題
```cpp=
#include<iostream>
using namespace std;
int main(){
  int k;
  cin>>k;
  int door[100005]={};
  int num[100005]={};
  int mk=-1;
  for(int i=1;i<=k;i++){
    cin>>door[i];
    num[i]=i;
  }
  int next;
  for(int i=1;i<=k;i++){
    next=door[i];
    int stop=0;
    int king=1;
    while(stop!=1){
      //cout<<"i= "<<i<<"/ next: "<<next<<"/ door[next]: "<<door[next]<<"/ king: "<<king<<"\n";
      if(next==i){
        stop=1;
      }
      else{
        king++;
        next=door[next];
      }
    }
    if(king>mk){
      mk=king;
    }
    if(mk>k/2){
      break;
    }
  }
  cout<<mk;
}
```
a273. 搶21 (The 21 Game) -- TOI練習賽202403新手組1第1題
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main(){
    int t,r;
    cin>>t>>r;
    if(t%(r+1)>0){
    	cout<<"1";
    }else{
    	cout<<"0";
    }
}
```
a274. 數字旅館 (hotel) -- TOI練習賽202403新手組第2題
```cpp=
#include<iostream>
#include <math.h>
using namespace std;
int main(){
  int n,k;
  cin>>n;
  for(int i=0;i<n;i++){
    cin>>k;
    if(k%3==0 && k%2==0){
      cout<<"1 ";
    }
    else if(k%2!=0 && k%3!=0){
      cout<<"2 ";
    }
    else if(pow(int(sqrt(k)), 2)==k || (k%2==0 && k%7!=0)){
      cout<<"3 ";
    }
    else{
      cout<<"0 ";
    }
  }
}
```
a304. 起司 (Cheese) -- TOI練習賽202409新手組第1題
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main(){
    int l, w, h, k;
    cin >> l >> w >> h >> k;
    if(l % k != 0 || w % k != 0 || h % k != 0){
        cout << "0";
    }
    else{
        cout << (l / k) * (w / k) * (h / k);
    }
}
```
a305. 電動滑板車 (e-Scooter) -- TOI練習賽202409新手組第2題
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main(){
    int t;
	cin >> t; 
    int nothing = t * 3;
    int normal = 299, vip = 699;
    if (nothing < normal){
        cout << nothing;
    }
    else if(t <= 300){
        cout << normal;
    }
    else if (t > 300 && t <= 750){
        int normal_out = normal + (t - 300) * 3 ;
        if(normal_out < vip){
            cout << normal_out;
        }
        else{
            cout << vip;
        }
    }
    else{
        int vip_out = vip + (t - 750) * 3;
        cout << vip_out;
    }
}
```
a306. 因數計算 (Factor) -- TOI練習賽202409新手組第3題
```cpp=
#include <bits/stdc++.h>
using namespace std;
int count(int n){
    int a=1;
    int num = 0;
    while(n >= a){
        if(n % a == 0){
            num++;
        } 
        a=a+1;
    }
    return num;
}
int main(){
    int x, y, max_num, max_count = 0;
    cin >> x >> y;
    for(int i = x; i <= y; i++){
        if(count(i) > max_count){
            max_num = i;
            max_count = count(i);
        }
    }
    cout << max_num << " " << max_count;
    
}
```
a309. 生日快樂 (Birthday) -- TOI練習賽202409新手組第1題
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main(){
    int m1, m2, m3, m4;
    cin >> m1 >> m2 >> m3 >> m4;
    int month[20]={0,0,31,59,90,120,151,181,212,243,273,304,334};
    int now = month[m1] + m2;
    int birthday = month[m3] + m4;
    int next = birthday - now;
    if(next < 0){
        next += 365;
    }
    cout << next;
}
```
a315. 凱撒密碼 (Cipher)-- TOI練習賽202412新手組第3題
```cpp=
#include<iostream>
using namespace std;  
int main(){	
    string s;
    int n;
    getline(cin,s);
    cin>>n;
    for(int i=0; i<s.size(); i++){
    	if(int(s[i])>=65 && int(s[i])<=90){
            s[i]=65+(s[i]-65+n)%26;
    	}
    	else if(int(s[i])>=97 && int(s[i])<=122){
            s[i]=97+(s[i]-97+n)%26;
    	}
    	cout << s[i];
    }
}
```
# APCS考古題
c002. 201603_q2 矩陣轉換
```cpp=
#include <iostream>
using namespace std;
int main(){
  int R,C,M;
  cin>>R>>C>>M;
  int B[1005][1005]={};
  for(int i=0;i<R;i++){
    for(int j=0;j<C;j++){
      cin>>B[i][j];
    }
  }
  int B2[1005][1005]={};
  int Mm[1005]={};
  for(int i=0;i<M;i++){
    cin>>Mm[i];
  }
  for(int k=M-1;k>=0;k--){
    //0 則代表旋轉，1 代表翻轉
    if(Mm[k]==0){
      int R2=R;
      R=C;
      C=R2;
      for(int i=0;i<R;i++){
        for(int j=0;j<C;j++){
          B2[i][j]=B[j][R-i-1];
        }
      }
    }
    else{
      for(int i=0;i<R;i++){
        for(int j=0;j<C;j++){
          B2[i][j]=B[R-i-1][j];
        }
      }
    }
    for(int i=0;i<R;i++){
      for(int j=0;j<C;j++){
        B[i][j]=B2[i][j];
      }
    }
  }
  cout<<R<<" "<<C<<endl;
  for(int i=0;i<R;i++){
    for(int j=0;j<C;j++){
      if(j==C-1){
        cout<<B[i][j]<<endl;
      }
      else{
        cout<<B[i][j]<<" ";
      }
    }
  }
}
```
c005. 201610_q1 三角形辨別
```cpp=
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int n[3]={};
    int a,b,c;
    for(int i=0;i<3;i++){
        cin>>n[i];
    }
    sort(n,n+3);
    a=n[0];
    b=n[1];
    c=n[2];
    cout<<a<<" "<<b<<" "<<c<<'\n';
    if(a+b<=c){
        cout<<"No";
    }
    else if((a*a)+(b*b)<(c*c)){
        cout<<"Obtuse";
    }
    else if((a*a)+(b*b)==(c*c)){
        cout<<"Right";
    }
    else {
        cout<<"Acute";
    }
}
```
c006. 201610_q2 最大和
```cpp=
#include<iostream>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    int num[25][25];
    int s=0;
    int a[25]={};//存每群最大
    for(int i=0;i<n;i++){
        int mn=0;
        for(int j=0;j<m;j++){
            cin>>num[i][j];
            if(num[i][j]>mn){
                mn=num[i][j];
            }
        }
        a[i]=mn;
    }
    for (int i=0;i<n;i++){
        s=s+a[i];
    }
    cout<<s<<'\n';
    int yes=0;
    for(int i=0;i<n;i++){	
        if(s%a[i]==0){
            cout<<a[i]<<" ";
            yes=1;
        }
    }
    if(yes==0){
        cout<<"-1";
    }

}
```
c009. 201703_q2 小群體
:::spoiler 思路
> [name=yiwen1825]因為 people 的索引(index) 代表自己,值(item)代表好友
所以 people 讀進去後這段沒問題
==然後 v 的話，都全部給 0==
拿範例二來說
3
0 2 1
people 讀 3 個值 0, 2, 1
然後 v 也開 3 個位子都是 0
==v 表示people[i]現在屬於哪個群體==
for i = 0 ; i = n ; i++ 看是從 people 的第一個位子開始找
這個時候 people[0] 的值會是 0 對吧
當 people[0] 走過一次後, 因為 v[0] 等於 0 表示 people[0] 還沒被加入群體
所以 v[0] = 1
根據說明, people[0] 裏面的值表示下一個好友的位置
people[0] 裏面的值 = 0 所以他已經形成一個圈圈
就算他只是一個點而已
這部分有少一個動作歐 先保留
然後發現 people[0] 沒有下一個對象了 所以換 people[1]
現在 people[1] = 2
然後 v[1] = 0
==然後 v[1] = 0 表示 people[1] 還沒被加入群體==
所以 v[1] = 2
因為群體中已經有 0 這個群體(編號1), 所以編號從2開始
現在有一個變數 nxt 要存 people[1] 的值 
因為他要順著好友一路找下去, 最後找到指回自己的群體形成一個圈圈
所以 nxt = people[1]
nxt 會等於 2
把 nxt 的值放進去 people[nxt]
people[nxt] = people[2] = 1
這時檢查 v[2]，因為 v[2] = 0， 他又在 people[1] 所在的群體， 所以 v[2] = 2
那現在所有 v 都有非 0 的編號 
v[0] = 1, v[1] = 2, v[2] = 2
就跳出迴圈 輸出 2
思路是這樣
:::
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n=0,group=0,nxt=0,people[50000];  
  char v[50000] = {0}; 
  cin >> n;
  for(int i = 0; i < n; i++)
      cin >> people[i];
  for(int i = 0; i < n; i++){
    if(v[i] == 0){
      nxt = i;            
      do{
        v[nxt] = group + 1;   
        nxt = people[nxt];  
      }
      while(v[nxt]==0);
      group++;               
    }
  }

  cout << group;
  return 0;
}
```
c011. 201703_q4 基地台
```cpp=
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=1e5+5;
int main(){
	int n,k;
	cin>>n>>k; //n個服務點 k個基地台
	int P[MAXN]={};
	for(int i=0;i<n;i++){
		cin>>P[i];
	}
	sort(P,P+n);
	//二分搜:左右邊界、找的東西去對條件
	int l=1,r=P[n-1]-P[0];
  	while(l<r){
    	int d=(l+r)/2;
    	int beg=P[0],cnt=1;
    	for(int i=1;i<n;i++){
    		if(beg+d<P[i]){
    			cnt++;
    			beg=P[i];
    		}
    	}
  		if(cnt<=k){
    		r=d;
  		} 
  		else{
    		l=d+1;
  		}
    }
    cout<<l;
}
```
c012: 201703_q1 秘密差
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
    int even = 0, odd = 0;
    string s;
    cin >> s;
    for (int i=0; i<s.size(); i++){
        if (i % 2){
            odd += s[i] - '0';
        } else {
            even += s[i] - '0';
        }
    }
    cout << abs(even - odd) << endl;
 
    return 0;
}
```
c014. 201710_q3 樹狀圖分析 (Tree Analyses)
```cpp=
#include<iostream>
#include<vector>
using namespace std;
const int MAXN=1e5+5;
vector<int> child[MAXN]={};
int dp[MAXN]={0};
int find_high(int root){
	//不用設if終止是因為是0的話for迴圈不會跑所以沒有無窮遞迴
	//然後也確保dp只會跑一次(因為從根往下)
	int maxh=-1;//自己最大高度
	for(int i=0;i<child[root].size();i++){ 
		int h=find_high(child[root][i]);
		if(h>maxh){
			maxh=h;
		}
	}
	return dp[root]=maxh+1;
}

int main(){
	int n;
	cin>>n;
	int parent[MAXN]={};
	for(int i=1;i<=n;i++){
		int kid_num;
		cin>>kid_num;
		for(int j=0;j<kid_num;j++){
			int k;
			cin>>k;
			child[i].push_back(k);
			parent[k]=i;
		}
	}
	int root=n/2;
	while(parent[root]!=0){
		root=parent[root];
	}
	find_high(root);
	long long int sumh=0;
	for(int i=1;i<=n;i++){
		sumh+=dp[i];
	}
	cout<<root<<endl<<sumh;
}
```
```cpp=
#include<iostream>
#include<queue>
using namespace std;
const int MAXN=1e5+5;
queue<int> que;
int main(){
	int n;
	cin>>n;
	int kid_num[MAXN]={};
	int parent[MAXN]={};
	for(int i=1;i<=n;i++){
		cin>>kid_num[i];
		if(kid_num[i]==0){
			que.push(i);
		}
		for(int j=0;j<kid_num[i];j++){
			int k;
			cin>>k;
			parent[k]=i;
		}
	}
	int root=n/2;
	while(parent[root]!=0){
		root=parent[root];
	}
	int h[MAXN]={};
	while(!que.empty()){
		int v=que.front();
		que.pop();
		if(v==root){
			break;
		}
		//用v更新parent[v]
		int p=parent[v];
		if(h[v]+1>h[p]){
			h[p]=h[v]+1;
		}
		//檢查parent[v]能不能丟進queue
		kid_num[p]--;
		if(kid_num[p]==0){
			que.push(p);
		}
	}
	long long int sumh=0;
	for(int i=1;i<=n;i++){
		sumh+=h[i];
	}
	cout<<root<<endl<<sumh;
}
//c014
```
c016. 201710_q1 邏輯運算子 (Logic Operators)
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  int a,b,ans;
  cin>>a>>b>>ans;
  if(a==0 && b==0){
    if(ans==0){
      cout<<"AND"<<endl<<"OR"<<endl<<"XOR";
    }
    else{
      cout<<"IMPOSSIBLE";
    }
  }
  else if(a!=0&&b!=0){
    if(ans==1){
      cout<<"AND"<<endl<<"OR"<<endl;
    }
    else if(ans==0){
      cout<<"XOR";
    }
    else{
      cout<<"IMPOSSIBLE";
    }    
  }
  else if(a!=0&&b==0){
    if(ans==1){
      cout<<"OR"<<endl<<"XOR"<<endl;
    }
    else if(ans==0){
      cout<<"AND";
    }
    else{
      cout<<"IMPOSSIBLE";
    }    
  }
    else if(a==0&&b!=0){
    if(ans==1){
      cout<<"OR"<<endl<<"XOR"<<endl;
    }
    else if(ans==0){
      cout<<"AND";
    }
    else{
      cout<<"IMPOSSIBLE";
    }    
  }  
}
```
c023. 202007_3. 圓環出口
```cpp=
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=2e5+5,MAXM=2e5+5;
int main(){
	int n,m;
	cin>>n>>m;
	int P[MAXN]={};
	int Q[MAXM]={};
	int total=0;
	for(int i=0;i<n;i++){
		cin>>P[i];
		total+=P[i];
	}
	for(int j=0;j<m;j++){
		cin>>Q[j];
	}
	int pre_sum[MAXN]={0};
	for(int i=1;i<=n;i++){
		pre_sum[i]=pre_sum[i-1]+P[i-1];
	}
	int now =0;
	for(int j=0;j<m;j++){
		int key=(pre_sum[now]+Q[j])%total;
		int le=0,ri=n;
		while(le<ri){
			int mid=(le+ri)/2;
			if(pre_sum[mid]>=key){
				ri=mid;
			}
			else{
				le=mid+1;
			}
		}
		now=le%n;	
	}
	cout<<now<<endl;
}
```
c037. 202109_3. 幸運數字
```cpp=
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=3e5+5;
struct Data {
	int val,index;
};
bool cmp(Data a,Data b){
	return a.val<b.val; //回傳按照val由小到大
}
int main(){
	int n;
	cin>>n;
	long long int p[MAXN]={},pre[MAXN]={};
	for (int i=0;i<n;i++){
		cin>>p[i];
		pre[i+1]=pre[i]+p[i];
	}
	Data d[MAXN]={};
	for(int i=0;i<n;i++){
		d[i].val=p[i];
		d[i].index=i;
	}
	sort(d,d+n,cmp);
	int l=0,r=n-1;
	int pos=0;
	while(l<r){
		int m=0;
		while(d[pos].index<l || d[pos].index>r){
			pos++;
		}
		m=d[pos].index;
		//前綴和
		long long int sum_l = pre[m]-pre[l];
		long long int sum_r = pre[r+1]-pre[m+1];
		if(sum_l>sum_r){
			r=m-1;
		}
		else{
			l=m+1;
		}
	}
	cout<<p[l]<<endl;
}
```
c059. 1. 程式考試
```cpp=
#include <iostream>
using namespace std;
int main(){
  int K;
  cin >> K;
  int hs=-2;
  int natime=0;
  int ht=0;
  for (int i=0;i<K;i++){
    int ti,si; //ti: 時間點，si: 分數
    cin >> ti >> si;
    if(si==-1){
      natime++;
    }
    else if(si>hs){
      hs=si;
      ht=ti;
    }
  }
  int totals=hs-K-natime*2; //提交紀錄中的最高分 - 總提交次數 - 總嚴重錯誤次數 * 2
  if(totals<0){
    totals=0;
    cout << totals << " " <<ht;
  }
  else{
    cout << totals << " " <<ht;
  }
}
```
c060. 2. 造字程式
```cpp=
#include <iostream>
#include <string>
using namespace std;
int main() {
  int k,q,r;
  cin>>k>>q>>r;
  int a[25][25]={};
  string str;
  cin>>str;
  char s[25]={};
  for(int i=0;i<k;i++){
    s[i]=str[i];
  }//字串割成字元
  for(int i=0;i<q;i++){
    for(int j=0;j<k;j++){
      cin>>a[i][j];
    }
  }
  char ans[25][25]={};
  char ns[25]={};//存新字串
  for(int i=0;i<q;i++){
    for(int j=0;j<k;j++){
      int x=a[i][j];//索引
      ns[x-1]=s[j];
    }//這時候第i+1次完整的新字串搞定
    for(int I=0;I<k;I++){
      ans[i][I]=ns[I];//存到答案裡
      s[I]=ns[I];//新字串變舊的，準備下一輪
    }
  }
  for(int i=0;i<r;i++){
    for(int j=0;j<q;j++){
      cout<<ans[j][i];
    }
    cout<<endl;
  }
}
```
c064. 2. 特殊位置
```cpp=
#include <iostream>
using namespace std;
int main() {
  int n,m;
  cin>>n>>m;
  int a=0; //howmuch
  int w[2505];//where
  int c[55][55];
  for (int i=0;i<n;i++){
    for(int j=0;j<m;j++){
      cin>>c[i][j];
    }
  }
  int k=0;//w[k]
  for (int i=0;i<n;i++){
    for(int j=0;j<m;j++){
      int x=c[i][j];
      int t=0;
      for (int p=0;p<n;p++){
        for (int q=0;q<m;q++){
          int d=abs(i-p)+abs(j-q);//曼哈頓距離
          if(d<=x){
            t=t+c[p][q];
          }
        }
      }
      if (t%10==x){
        w[k]=i;
        w[k+1]=j;
        k=k+2;
        a++;
      }
    }
  }
  cout<<a<<endl;
  for (int i=0;i<k;i=i+2){
    cout<<w[i]<<" "<<w[i+1]<<endl;
  }
}
```
c067. 1. 機械鼠 
```cpp=
#include <iostream>
using namespace std;
int main() {
  int x,n;
  cin>>x>>n;
  int right=0;
  int xright=-101;
  int left=0;
  int xleft=101;
  int a;
  for (int i=0;i<n;i++){
    cin>>a;
    if(a>x){
      right++;
      if(a>xright){
        xright=a;
      }
    }
    else if(a<x){
      left++;
      if(a<xleft){
        xleft=a;
      }
    }
  }
  if(right>left){
    cout<<right<<" "<<xright;
  }
  else{
    cout<<left<<" "<<xleft;
  }
}
//c067
```
c068. 2. 卡牌遊戲
```cpp=
#include <iostream>
using namespace std;
int main() {
  int n,m;
  cin>>n>>m;
  int a=0; //ans
  int c[45][45];
  for (int i=0;i<n;i++){
    for(int j=0;j<m;j++){
      cin>>c[i][j];
    }
  }
  int OK=0;
  while (OK==0){
    int C=0;//連續次數
    for (int i=0;i<n;i++){ //橫
      for(int j=0;j<m;j++){
        int b=1;
        int k=1;
        while (b==1){
          if (c[i][j+k]==-1  ) {
            k++;
          }
          else if (j-k>0 && c[i][j-k]==-1) {
            k++;
          }
          else if(c[i][j]==c[i][j+k] && c[i][j]>=0 && c[i][j+k]>=0){
            a=a+c[i][j];
            c[i][j]=-1;
            c[i][j+k]=-1;
            b=0;
            C++;
          }
          else if(c[i][j]==c[i][j-k] && c[i][j]>=0 && c[i][j-k]>=0){
            a=a+c[i][j];
            c[i][j]=-1;
            c[i][j-k]=-1;
            b=0;
            C++;
          }
          else{
            b=0;
          }
          }
        }
      }
    for (int i=0;i<n;i++){ //直
      for(int j=0;j<m;j++){
        int b=1;
        int k=1;
        while (b==1){
          if (c[i+k][j]==-1){
            k++;
          }
          else if (i-k>0 && c[i-k][j]==-1) {
            k++;
          }
          else if(c[i][j]==c[i+k][j] && c[i][j]>=0 && c[i+k][j]>=0){
            a=a+c[i][j];
            c[i][j]=-1;
            c[i+k][j]=-1;
            b=0;
            C++;
          }
          else if(c[i][j]==c[i-k][j] && c[i][j]>=0 && c[i-k][j]>=0){
            a=a+c[i][j];
            c[i][j]=-1;
            c[i-k][j]=-1;
            b=0;
            C++;
          }
          else{
            b=0;
          }
          }
        }
    }
    if (C==0){
      OK=1;
    }
  }
  cout<<a;
}
```
c071. 1. 遊戲選角
```cpp=
#include<iostream>
using namespace std;
const int MAXN=25;
int main(){
	int n;
	cin>>n;
	int max=-1,two=-2;
	int index_max=n+2;
	int index_two=n+1;
	int a[MAXN]={},d[MAXN]={};
	for(int i=1;i<=n;i++){
		cin>>a[i]>>d[i];
		int p=a[i]*a[i]+d[i]*d[i];
		if(p>max){
			two=max;
			index_two=index_max;
			max=p;
			index_max=i;
		}
		else if(p>two){
			two=p;
			index_two=i;
		}
	}
	cout<<a[index_two]<<" "<<d[index_two];
}
```
c074. 4. 合併成本
```cpp=
#include<iostream>
using namespace std;

const int MAXN=205;
const int oo=1e9+9;

int pre_sum[MAXN]={};
int sum(int p[],int l,int r){
	return p[r+1]-p[l];
}
int dp[MAXN][MAXN]={};
int cut(int p[],int l,int r){
	if(r==l){
		return 0;
	}
	if(dp[l][r]!=0){
		return dp[l][r];
	}
	int mincut=oo;
	for(int i=l;i<r;i++){
		int c=cut(p,l,i)+cut(p,i+1,r)+
		abs(sum(p,l,i)-sum(p,i+1,r));
		if(c<mincut){
			mincut=c;
		}
	}
	return dp[l][r]=mincut;
}
int main(){
	int n;
	cin>>n;
	int a[MAXN]={};
	for(int i=0;i<n;i++){//前面留一格才不會出錯
		cin>>a[i];
	}
	for(int i=0;i<n;i++){ //前綴和，這樣sum那邊就不用跑迴圈
		pre_sum[i+1]=pre_sum[i]+a[i];
	}
	cout<<cut(pre_sum,0,n-1)<<endl;
}
```
c083. 1. 等紅綠燈 -- 2025年1月APCS
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main(){
    int a, b;
    cin >> a >> b;
    int one = a + b;
    int n;
    cin >> n;
    int t = 0;
    for(int i = 0; i < n; i++){
    	int child, wait;
    	cin >> child;
    	int cycle = child % one;
    	if(cycle >= a){
    		wait = b - (cycle - a);
    		t += wait;
    	}
    }
    cout << t;
}
```
# APCS325
d012. P_2_1 不同的數
```cpp=
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int n;
	cin>>n;
	int a[100000]={};
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	sort(a,a+n);
	int t=1;
	int ans[100000]={a[0]};
	for(int i=1;i<n;i++){
		if(a[i]!=a[i-1]){
			ans[t]=a[i];
			t++;
		}
	}
	cout<<t<<'\n';
	for(int i=0;i<t;i++){
		cout<<ans[i]<<" ";
	}
}
```
d017. Q_2_7 互補團隊 (APCS201906) 
```cpp=
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=2e5+5,MAXM=2e5+5;
string make_h(string s,int m){
	bool has[26]={};
	for(int j=0;j<s.size();j++){
		has[s[j]-'A']=true;
	}
	string ans="";
	for(int j=0;j<m;j++){
		if(!has[j]){
			ans+=j+'A';
		}
	}
	return ans;
}
int main(){
	int m,n;
	cin>>m>>n;
	string A[MAXN]={};
	for(int i=0;i<n;i++){
		string s;
		cin>>s;
		bool has[26]={};
		for(int j=0;j<s.size();j++){
			has[s[j]-'A']=true;
		}
		for(int j=0;j<m;j++){
			if(has[j]){
				A[i]+=j+'A';
			}
		}
	}
	sort(A,A+n);
	int cnt=0;
	for(int i=0;i<n;i++){
		string key=make_h(A[i],m);
		int le=i+1,ri=n-1;//le:每一格都往後找
		bool found=false;
		while(le<=ri){
			int mid=(le+ri)/2;
			if(A[mid]==key){
				found=true;
				break;
			}
			else if(A[mid]>key){
				ri=mid-1;
			}
			else{
				le=mid+1;
			}
		}
		if(found){
			cnt++;
		}
	}
	cout<<cnt<<endl;
}
```
d019. P_2_6 Two-Number problem
```cpp=
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int n,m,k;
	cin>>n>>m>>k;
	int a[100000]={};
	int b[100000]={};
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	for(int i=0;i<m;i++){
		cin>>b[i];
	}
	sort(a,a+n);
	sort(b,b+m);
	int t=0;
	int i=0,j=m-1;
	while(i<n && j>=0){
		if(a[i]+b[j]>k){
			j--;
		}
		else if (a[i]+b[j]<k){
			i++;
		}
		else{
			t++;
			i++;
			j--;
		}
	}
	cout<<t<<'\n';
}
```
d043. P_4_1 少林寺的代幣 -- Dr.Wu
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int m,money,c50,c10,c5,c1;
  int total[100]={};
  cin >> m;
  for (int i=0;i<m;i++){
    cin>>money;
    c50 = money/50;
    money = money%50;
    c10 = money/10;
    money = money%10;
    c5 = money/5;
    money = money%5;
    c1 = money;
    total[i]=c50 + c10 + c5 + c1;
  }
  for (int j=0;j<m;j++){
    cout<<total[j]<<endl;
  }
}
```
d044. P_4_2 笑傲江湖之三戰 -- Dr.Wu
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long int n,win=0,bi,ai;
  long long int t=0;
  cin >> n;
  long long int they[100005]={};
  long long int our[100005]={};
  for (int i=0;i<n;i++){
    cin>>they[i];
  }
  for (int i=0;i<n;i++){
    cin>>our[i];
  }
  sort(they,they+n);
  sort(our,our+n);
  ai=n-1;
  bi=n-1;
  while(bi>=0){
    if(our[ai]>they[bi]){
      win=win+1;
      ai=ai-1;
      bi=bi-1;
    }
    else{
      bi=bi-1;
    }
  }
  cout<<win;
}
```
d045. P_4_3 十年磨一劍(最少完成時間) -- Dr.Wu
```cpp=
//法一:用乘法
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long int n;
  long long int t=0;
  cin >> n;
  long long int time[1000001]={};
  for (int i=0;i<n;i++){
    cin>>time[i];
    t=t+time[i];
  }
  sort(time,time+n);
  for (int j=1;j<n;j++){
    t=t+time[j-1]*(n-j);
  }
  cout<<t;
}
```
```cpp=
//法二:用加法
#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long int n;
  long long int t=0;
  cin >> n;
  long long int time[1000001]={};
  for (int i=0;i<n;i++){
    cin>>time[i];
  }
  sort(time,time+n);
  t=t+time[0];
  for (int j=0;j<(n-1);j++){
    t=t+time[j]+time[j+1];
    time[j+1]+=time[j];
}
  cout<<t;
}
```
d056. P_4_14 控制點(2D-max)
```cpp=
#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
const int MAXN=1e5+5;
struct Point{
	int x,y;
};
bool cmp(Point a,Point b){
	if(a.x ==b.x){
		return a.y<b.y;
	}
	return a.x<b.x; //從小排到大
}
int main(){
	int n;
	cin>>n;
	Point p[MAXN];
	for (int i=0;i<n;i++){
		cin>>p[i].x;
	}
	for (int i=0;i<n;i++){
		cin>>p[i].y;
	}
	sort(p,p+n,cmp);
	int ans=1;
	int maxy=p[n-1].y;
	for(int i=n-2;i>=0;i--){
		if(p[i].y>maxy){
			maxy=p[i].y;
			ans++;
		}
	}
	cout<<ans;
}
```
d078. P_6_9 大賣場免費大搬家
```cpp=
#include<iostream>
using namespace std;
const int MAXN=1e5+5;
int dp[105][MAXN]={0};
int use(int n,int g[],int m[],int w){
	//買use(n-1,g,m,w-g[i])
	//不買use(n-1,g,m,w)
	if(n==-1){
		return 0;
	}
	else{
		if(dp[n][w]!=0){
			return dp[n][w];
		}
		int buy=0,not_buy=0;
		if(w<g[n]){
			not_buy+=use(n-1,g,m,w);
		}
		else{
			buy+=use(n-1,g,m,w-g[n])+m[n];
			not_buy+=use(n-1,g,m,w);			
		}
		if(buy>not_buy){
			return dp[n][w]=buy;
		}
		else{
			return dp[n][w]=not_buy;
		}		

	}
}
int main(){
	int n,w;
	cin>>n>>w;
	int g[105];
	int m[105];
	int p=0;
	for(int i=0;i<n;i++){
		cin>>g[i];
	}
	for(int i=0;i<n;i++){
		cin>>m[i];
	}
	cout<<use(n-1,g,m,w)<<endl;
}
```
d086: P_6_17 切棍子
```cpp=
#include<iostream>
using namespace std;

const int MAXN=205;
const int oo=1e9+9;

int dp[MAXN][MAXN]={};
int cut(int a[],int l,int r){
	if(r-l==1){
		return 0;
	}
	if(dp[l][r]!=0){
		return dp[l][r];
	}
	int mincut=oo;
	for(int i=l+1;i<r;i++){
		int c=cut(a,l,i)+cut(a,i,r);
		if(c<mincut){
			mincut=c;
		}
	}
	return dp[l][r]=mincut+a[r]-a[l];
}
int main(){
	int n,L;
	cin>>n>>L;
	int a[MAXN]={0};
	for(int i=1;i<=n;i++){//前面留一格才不會出錯
		cin>>a[i];
	}
	a[n+1]=L;
	cout<<cut(a,0,n+1)<<endl;
}
//切棍子
```
d095. P_7_1 探索距離
```cpp=
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int MAXN=105;
int main(){
	int n,m;
	cin>>n>>m;
	int s;
	cin>>s;
	vector<int> ne[MAXN]={};//鄰居
	for(int i=0;i<m;i++){
		int u,v; //這個u跟v只會在這個迴圈裡
		cin>>u>>v;
		ne[u].push_back(v);
	}
	//queue:BFS(走一格的可能性試完再往下看) 廣度優先(先進先出)
	//stack:DFS(一條路走到底再回去) 深度優先(後進先出)
	//在這題用queue 因為會有最佳解
	queue<int>que; //存下一個用的
	que.push(s);
	bool visited[MAXN]={false}; //紀錄點有沒有被走過(防無窮圈)
	visited[s]=true;//標記起點
	int dis[MAXN]={};
	int cnt=0;
	int total_d=0;
	while(!que.empty()){
		int t=que.front();//看最上面(不丟)
		que.pop();//把最上面丟掉
		total_d+=dis[t];
		cnt++;
		for(int v : ne[t]){ // =for v in ne
			if(visited[v]) continue;
			visited[v]=true;
			dis[v]=dis[t]+1;
			que.push(v);
		}
	}
	cout<<cnt-1<<endl<<total_d;
}
```
d096. P_7_2 開車蒐集寶物
```cpp=
#include <bits/stdc++.h>
using namespace std;
const int MAXN=5*1e4+5;
int st(int v,vector<int> ne[],bool visited[],int mo[],int now){
	int money=mo[now];
	for(int i : ne[now]){
		if(visited[i]) continue;
		visited[i]=true;
		money+=st(i,ne,visited,mo,i);	
	}
	return money;
}
int main(){
	int n,m;
	cin>>n>>m;
	int mo[MAXN]={};
	for(int i=0;i<n;i++){
		cin>>mo[i];
	}
	vector<int> ne[MAXN]={};//鄰居
	for(int i=0;i<m;i++){
		int a,b;
		cin>>a>>b;
		ne[a].push_back(b);
		ne[b].push_back(a);
	}
	bool visited[MAXN]={false}; //紀錄點有沒有被走過(防無窮圈)
	int ans=0;
	for(int v=0;v<n;v++){
		if(visited[v]) continue;
		visited[v]=true;
		ans=max(ans,st(v,ne,visited,mo,v));
	}
	cout<<ans;
}
```
d102. Q_7_8 小寶的著色問題
```cpp=
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e4+5;
bool bfs(int n,vector<int> ne[],int visited[],int now){
	queue<int> que;
	que.push(now);
	visited[now]=1;
	while(!que.empty()){
		int t=que.front();//看最上面(不丟)
		que.pop();//把最上面丟掉
		for(int i : ne[t]){
			if(visited[i]==visited[t]){//衝突
				return false;
			}
			else if (visited[i]==0){
				visited[i]=-visited[t];//上不同顏色
				que.push(i);//放進去
			}
		}
	}
	return true;
}
bool check(int n,vector<int> ne[]){
	int visited[MAXN]={};//0:沒色
	for(int i=0;i<n;i++){
		if(visited[i]!=0) continue;
		if(!bfs(n,ne,visited,i)) return false;
	}
}
int main(){
	cin.tie(0)->sync_with_stdio(0);
	int t;
	cin>>t;
	for(int T=0;T<t;T++){
		int n,m;
		cin>>n>>m;
		vector<int> ne[MAXN]={};//鄰居
		for(int i=0;i<m;i++){
			int a,b;
			cin>>a>>b;
			ne[a].push_back(b); //雙向
			ne[b].push_back(a);
		}
		if(check(n,ne)) cout<<"yes"<<"\n";
		else cout<<"no"<<"\n";
	}

}
```
d111. P_8_5 自動分裝 (APCS202002) 
```cpp=
#include<iostream>
using namespace std;
const int MAXN=2e5+5,MAXM=105;
int l_c[MAXN]={};//leftchild
int r_c[MAXN]={};//rightchild
int w[MAXN]={};//weight
//void : 做完但沒回傳但陣列會儲存
//int : 做完且有回傳值
/*
void get_weight(int root){
	if(root>=n){
		return;
	}
	int lc=l_c[root],rc=l_r[root];
	get_weight(lc);
	get_weight(rc);
	w[root]=w[lc]+w[rc];
	return;
}
*/
//↓=↑
int get_weight(int root){
	if(l_c[root]==0){
		return w[root];
	}
	return w[root]=get_weight(l_c[root])+get_weight(r_c[root]);
}
int main(){
	int n,m;
	cin>>n>>m;
	//1~n-1 -> 切換器
	//n~2n-1 -> 貨櫃
	for(int i=n;i<2*n;i++){ 
		cin>>w[i];
	}
	int good[MAXM]={};
	for(int i=0;i<m;i++){
		cin>>good[i];
	}
	for(int i=0;i<n-1;i++){
		int p,s,t;
		cin>>p>>s>>t;
		l_c[p]=s;
		r_c[p]=t;
	}	
	get_weight(1);
	for(int i=0;i<m;i++){
		int g=good[i],root=1;
		while(l_c[root]>0){
			int l=l_c[root],r=r_c[root];
			if(w[l]<=w[r]){
				w[l]+=g;
				root=l;
			}
			else{
				w[r]+=g;
				root=r;
			}
		}
		cout<<root<<" ";
	}
}
```