# 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<<" ";
}
}
```