# 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: `資源`