22. A 実装例
C++
#include"bits/stdc++.h"
using namespace std;
int main(){
int A, B, C;
cin >> A >> B >> C;
int m = A;
if(m > B){
m = B;
}
if(m > C){
m = C;
}
cout << A + B + C - m << endl;
}
Python3
a,b,c = map(int,input().split())
m = a
if m > b:
m = b
if m > c:
m = c
print(a + b + c - m)
JOI 2019/2020 一次予選② 最速非公式解説
変数の宣言
入力の受け取り
最小値の計算
入力の受け取り
最小値の計算
【Tips】
最小値は様々な方法で求めることが出来る
・ここで紹介した方法は要素数が大きくなっても対
応しやすい方法だ
・他にも C++ であれば min 関数を用いて
int m = min({A, B, C});
などとすることもできる
24. B 問題概要
• 長さ 𝑁 の文字列 𝑆 が与えられる
• 𝑆 の 𝐴 文字目から 𝐵 文字目まで
の並びを逆にした文字列は?
• ただし,𝑆 の先頭は 1 文字目で
末尾が 𝑁 文字目
JOI 2019/2020 一次予選② 最速非公式解説
J O I j o i J o I j
J O J i o j I o I j
25. B 考察の前に
文字列の扱い方を確認しよう
【C++】
• 文字列は string 型
• 文字列から 𝑖 文字目 0 ≦ 𝑖 < 𝑁 だけを取り出すに
は 𝑆[𝑖] とする
• 𝟎 文字目から始まることに注意
Python は省略
JOI 2019/2020 一次予選② 最速非公式解説
0 1 2 3 4 5 6 7 8 9
J O I j o i J o I j
▲ 𝐴 − 1 文字目 ▲ 𝐵 − 1 文字目
27. B 実装例
C++
#include"bits/stdc++.h"
using namespace std;
int main(){
int N, A ,B;
string S;
cin >> N >> A >> B >> S;
for(int i=0; i<=A-2; i++){
cout << S[i];
}
for(int i=B-1; i>=A-1; i--){
cout << S[i];
}
for(int i=B; i<=N-1; i++){
cout << S[i];
}
cout << endl;
}
Python3
n,a,b = map(int,input().split())
s = input()
i = 0
while i<=a-2:
print(s[i], end="")
i += 1
i = b-1
while i >=a-1:
print(s[i], end="")
i -= 1
i = b
while i <= n-1:
print(s[i], end="")
i += 1
JOI 2019/2020 一次予選② 最速非公式解説
文字列はstring型
ループはfor文
逆向きにループを
回すときは不等号
の向きとi--に注意
複雑なループは
while文
改行無しで出力す
るときはend=""
【Tips】
reverse関数を用いれば簡単に文字列を反転させ
ることが出来る (C++の場合は下)
reverse(S.begin()+A-1, S.begin()+B);
for文で逆向きの
ループを回す方法
も調べてみよう!
38. A 実装例
C++
#include"bits/stdc++.h"
using namespace std;
int main(){
int X, L, R;
cin >> X >> L >> R;
if(X < L){
cout << L << endl;
}
if(L <= X && X <= R){
cout << X << endl;
}
if(R < X){
cout << R << endl;
}
}
Python3
x,l,r = map(int,input().split())
if x < l:
print(l)
if l <= x <= r:
print(x)
if r < x:
print(r)
JOI 2019/2020 一次予選③ 最速非公式解説
変数の宣言
入力の受け取り
場合分けの実装
入力の受け取り
場合分けの実装
条件式の「かつ」は &&
L <= X <= R とは
できないので注意!
40. B 問題概要
• 長さ 𝑁 の文字列 𝑆 が与えられる
• 𝑆 はすべて英小文字である
• 𝑆 に含まれる連続する文字列
'joi' をすべて 'JOI' に置き換
えた文字列は?
JOI 2019/2020 一次予選③ 最速非公式解説
j o i n o j o i j i n
J O I n o J O I j i n
41. B 考察の前に
文字列の扱い方を確認しよう
【C++】
• 文字列は string 型,文字は char 型
• 文字は'a'のようにシングルクオーテーションで囲む
• 文字列から 𝑖 文字目 0 ≦ 𝑖 < 𝑁 だけを取り出すに
は 𝑆[𝑖] とする
• 𝟎 文字目から始まることに注意
JOI 2019/2020 一次予選③ 最速非公式解説
0 1 2 3 4 5 6 7 8 9 10
j o i n o j o i j i n
48. C 実装例
C++
#include"bits/stdc++.h"
using namespace std;
int main(){
int N, A[100];
cin >> N;
for(int i=0; i<N; i++) cin >> A[i];
int ans = 1;
for(int l=0; l<N; l++){
for(int r=l+1; r<N; r++){
if(A[r-1] > A[r]) break;
if(ans < r-l+1) ans = r-l+1;
}
}
cout << ans << endl;
}
Python3
n = int(input())
a = list(map(int,input().split()))
ans = 1
for l in range(n):
for r in range(n):
if l >= r:
continue
if a[r-1] > a[r]:
break
if ans < r-l+1:
ans = r-l+1
print(ans)
JOI 2019/2020 一次予選③ 最速非公式解説
昇順が維持されなく
なったらループ終了
break; を使う
最大値は前回紹介し
た方法で求める
最大値は前回紹介し
た方法で求める
昇順が維持されなく
なったらループ終了
break を使う
𝑟 = 𝑙 + 1 となるまで
continue
を使って待つ