# TOI 10月份解題報告 :::danger <font color="#404040">題目</font>[傳送門](https://github.com/lmshlmcps4th/Bulletin-Board/releases/tag/toi21.10.1) ::: ## 目次 :::spoiler > [TOC] ::: ### 李信緯 :::success ##### 第一題 ```CPP= #include <iostream> using namespace std; int main(){ int a,s; cin>>a>>s; if(s%a==0) cout<<s/a<<"\n"; else cout<<s/a+1<<"\n"; return 0; } ``` 解題想法: >公式:a=Δv÷Δt => Δt×a=Δv [百度百科_加速度](https://baike.baidu.hk/item/%E5%8A%A0%E9%80%9F%E5%BA%A6/3764) >最小單位為s(秒),不足1s需無條件進位 ##### 第二題 ```CPP= #include <iostream> using namespace std; int main(){ long long a,x[10001]={1},n=0; cin>>a; for(int i=1;i<=a;i++){ cin>>x[i]; if(x[i-1]<x[i]) n=n+(x[i]-x[i-1])*3; else n=n+(x[i-1]-x[i])*2; } cout<<n<<"\n"; return 0; } ``` 解題想法: >社長想吃咖哩豬排 ##### 第三題 ```CPP= #include <iostream> using namespace std; int main(){ int n,m,d; bool a=false; cin>>n>>m>>d; while(d>=0){ if(d%n==0||d%m==0){ a=true; //更改bool break; //迴圈停止 } else d=d-(n+m); } if(a) cout<<"YES\n"; else cout<<"NO\n"; return 0; } ``` 解題想法: >D=(N+M)的倍數+(N或M)的倍數 >利用a偵測D是否成立 > >第7行需d>=0,因有"D=(N+M)的倍數"的可能性 >(但本次競賽未出現"D=(N+M)的倍數"的測資) >[推! 不錯解題方法](#%E7%AC%AC%E4%B8%89%E9%A1%8C4) ::: ### 陳育琳 :::success ##### 第一題 ```CPP= #include <iostream> using namespace std; int main(){ int a,v; while(cin>>a>>v){ if(v%a==0){ cout<<v/a<<endl; }else{ cout<<(v/a)+1<<endl; } } return 0; } ``` 解題想法: >只是除法而已 ##### 第二題 ```CPP= #include <iostream> using namespace std; int main(){ int a; while(cin>>a){ int b[a+1],sum=0; b[0]=1; for(int i=1;i<=a;i++){ cin>>b[i]; } for(int i=1;i<=a;i++){ if(b[i]-b[i-1]>0){ sum=sum+(b[i]-b[i-1])*3; }else{ sum=sum+(b[i-1]-b[i])*2; } } cout<<sum<<endl; } return 0; } ``` ```CPP= #include <iostream> using namespace std; int main(){ int n; while(cin>>n){ int sum=0,start=1,ed; for(int i=1;i<=n;i++){ cin>>ed; if(ed>start){ sum=sum+(ed-start)*3; }else{ sum=sum+(start-ed)*2; } start=ed; } cout<<sum; } } ``` 解題想法: >上面是用陣列的寫法 下面是不用的(有夠廢話 >反正就是用後項減前項 判斷正負 再加起來 ##### 第三題 ```CPP= #include <iostream> using namespace std; int main(){ int a,b,c,x,tmp; while(cin>>a>>b>>c){ x=c/a; int flag=0; for(int i=x;i>=0;i--){ flag=0; int sum=0,j=0; while(flag==0){ sum=(i*a)+(j*b); if(sum>c){ break; }else if(sum==c){ flag=1; }else{ j++; } } if(flag==1){ cout<<"YES"<<endl; break; } } if(flag==0){ cout<<"NO"<<endl; } } } ``` 解題想法: >解的最爛的一題 不懂自己為審麼要把他變得那麼複雜 >反正就是用除法去算出前面的那個系數最高多少 然後用j去列出後項的系數 加起來超過就結束 前項系數-1 [懂布林值得看社長的](#%E7%AC%AC%E4%B8%89%E9%A1%8C) 我很爛 ::: ### 李偉漢 :::success ##### 第一題 ```CPP= #include <iostream> using namespace std; int main(){ int b,a; cin >> b >> a; if(a%b==0){ cout << a/b; }else{ cout << a/b+1; } return 0; } ``` 解題想法: >同電神之想法 ::: ### 黃渝婷 :::success ##### 第一題 ```CPP= #include<iostream> using namespace std; int main(){ int a; //加速度 int speed; //目標速度 cin>>a>>speed; if(speed%a==0){ //如果speed可以被a整除 cout<<speed/a<<endl; } else{ //如果speed不被a整除就加1 cout<<speed/a+1<<endl; } return 0; } ``` > ##### 第二題 ```CPP= #include<iostream> using namespace std; int main(){ int a,i; int b; //樓層 int c; //上個樓層 int total; //耗電量 cin>>a; //電梯次數 for(i=1;i<=a;i=i+1) //i是循環次數 { cin>>b; if(i==1) //移動第一次 { total=(b-1)*3; c=b; continue; } if (b>c){ //電梯上升 total=total+(b-c)*3; } else{ //電梯下降 total=total+(c-b)*2; } c=b; } cout<<total; return 0; } ``` ##### 第三題 ```CPP= #include<iostream> using namespace std; int main(){ int jump1; //固定跳躍的步數1 int jump2; //固定跳躍的步數2 int total; //目的地的長度 cin>>jump1>>jump2>>total; //輸入一組數字 for(int i=0;;i++) { // cout<<total<<"\n"; if(total%jump2==0||total%jump1==0){ //如果total能被jump1或jump2整除 cout<<"YES"<<"\n"; break; } else{ total=total-jump2-jump1; //total減jump1和jump2 } if(total<0){ //如果total變成負數 cout<<"NO"<<"\n"; break; } } return 0; } ``` > ::: ### 陳謙慧 :::success ##### 第一題 ```CPP= #include <iostream> using namespace std; int main() { long int A,S; cin>>A>>S;{ if(S%A==0){ cout<<S/A<<endl; } else{ cout<<S/A+1<<endl; } } return 0; } ``` > ::: ### 黃長智 :::success ``` 社外人士 ``` ##### 第一題 ```CPP= #include<iostream> using namespace std; int main(){ int a,v,t=0; cin>>a>>v; while(v>0){ v=v-a; t++; } cout<<t; } ``` ##### 第二題 ```CPP= #include<iostream> using namespace std; int main(){ int n,e=0,save=1; cin>>n; int t[n]; for(int a=0;a<n;a++){ cin>>t[a]; } for(int a=0;a<n;a++){ if(save>t[a]){ e=e+(save-t[a])*2; save=t[a]; } else{ e=e+(t[a]-save)*3; save=t[a]; } } cout<<e; } ``` ##### 第三題 ```CPP= #include<iostream> using namespace std; int main(){ int N,M,D; cin>>N>>M>>D; while(D>0){ if(D%M==0){ cout<<"YES"; return 0; //結束程式 } D=D-N; } cout<<"NO"; } ``` ###### tags: `資源`