追記
139 簡単 配列のように文字列内の文字を1文字づつチェック
138 簡単 ifを使う。
ABCのA問題に関して。
完走した感想はどんなに多くてもA問題ならば約20問ぐらい解けば、他のA問題も十分に解ける程度の実力がついているはずです。
競技プログラミングではありますがA問題ぐらいのレベルの問題ならば、毎回初心者でも十分解けるレベルで出題されています。
小学生でも参加が可能か?
2020年度からの小学校プログラミング教育の全面実施されるそうです。小学生でも十分解けるレベルの問題なのでどんどん参加して見てはいかがでしょうか?
リポジトリ&成果
github
pg/ABC at master · masakinihirota/pg
https://github.com/masakinihirota/pg/tree/master/ABC
続き
競技プログラミング ABCのB問題の過去問を完走したので、難度と感想&ヒントを書きました。 - Qiita
https://qiita.com/masakinihirota/items/1234258b32cf47c4a03b
成果
AtCoder Problems
https://kenkoooo.com/atcoder/#/table/masakinihirota
AtCoder Problems
https://kenkoooo.com/atcoder/#/user/masakinihirota
A問題を100%に埋めたのは気持ちよかったですね。
表の見方
プログラム言語の入門書が終わっているレベルの前提で
優しい問題は文頭に
難度 | おすすめ度 |
---|---|
今まででいちばんやさしい | 小学生3,4年程度の算数の知識 |
簡単 | 小学生5,6年程度の算数の知識 |
無し | 中学生程度の算数の知識 |
の3段階に分けています。
初心者はまずは2完(A問題、B問題の2題を完全回答)を目指しましょう。
A問題は小学生3,4年生程度の算数の知識で解けます、逆に、難しいのは命令文の英単語ではないでしょうか?
コンテスト開催予定
AtCoder:競技プログラミングコンテストを開催する国内最大のサイト
https://atcoder.jp/
A問題リスト
ABCの番号 | Aの感想orヒント |
---|---|
132 | 文字列のsortを使う |
131 | 隣同士の比較 |
130 | 簡単 |
129 | 整数の配列のsort |
128 | 簡単 |
127 | 簡単 |
126 | 簡単 |
125 | 簡単 |
124 | 簡単 |
123 | 三項演算子 |
122 | 簡単 |
121 | 素直に解く、全体から黒部分を除いた長さが白 |
120 | ifかminのどちらかをつかう |
119 | フォーマットが決まっているので文字列比較ができる |
118 | 約数 余りが0かそれ以外 三項演算子はカッコで囲む |
117 | 簡単 |
116 | 角ABCが90度なのでabとbcで面積が出る |
115 | 簡単 力技で解決 |
114 | 簡単 |
113 | 簡単 |
112 | 簡単 |
111 | 整数で出力と指定されても、文字列の出力で通った。 charの利用で簡単に |
110 | sort 降順でも 後ろから計算でも |
109 | 2が存在した場合のみNo 偶数になるのは2を掛けたときだけ |
108 | 偶数ならちょうど半分 なので同じ数を掛ける、奇数なら片方を+1して掛ける (数I・Aの場合の数) |
107 | 簡単 |
106 | 簡単 |
105 | 簡単 |
104 | 簡単 |
103 | 難しい 解説PDFは結論のみ。どれを選ぶか不明なので総当たりするか、PDFの式を使う A-b b-c c-aのそれぞれの絶対値を計算して、その中で小さい方から2個の数を足す、ソートして0番目と1番目を足す |
102 | Nで割り切れるので答えはNの倍数、Nが偶数なら2で割り切れるのでN、Nが奇数なら2倍すれば2でも割り切れるので答えとなる。 最小公倍数というよりも、数学の基礎的な考え方を問う問題。 Lcm関数gcm関数はC++17 から導入 |
101 | 簡単 |
100 | 3つ同時に取ることは出来ない、最大2つを交互に取るのでどちらかが8個を超えることは出来ない 一瞬場合分けと戸惑ったが、問題を丁寧に読めばすぐ解ける問題。 |
99 | 簡単 |
98 | max({a,b,c})を使う 3つから探せる(複数可) max(a,b)だと2つを比較 |
97 | 簡単 abs() |
96 | 簡単 三項演算子 |
95 | 簡単 文字列は配列と考えてループさせる |
94 | 簡単 条件はじっくり考える |
93 | 簡単 文字列のsortを使う |
92 | 簡単 |
91 | 簡単 |
90 | 文字列そのものを1次元配列と考え、文字列の位置を2次元配列と考えて、指定の場所を取り出す。 |
89 | 今まででいちばんやさしい |
88 | 簡単 三項演算子 |
87 | 簡単 |
86 | 簡単 三項演算子 |
85 | 簡単 |
84 | 簡単 |
83 | 簡単 |
82 | 簡単 入力を実数として扱い、ceil()を使う。 |
81 | チェック 文字列をループしてifで探す。 |
80 | 簡単 min関数を使う。 |
79 | 文字列を配列と考え、 各文字を比較する。3つ揃えばYes |
78 | 簡単 3つの比較 |
77 | reverse_copyを使って逆順にした文字列をコピーして比較。 もしくは3文字だと中央が動かないので、中央を比較、そのあとで前と後ろがひっくり返っているかを比較 |
76 | 今まででいちばんやさしい |
75 | 簡単 |
74 | 今まででいちばんやさしい |
73 | 数字を文字列として捉え、配列のようにアクセスして調べる。 三項演算子 |
72 | 簡単 三項演算子 で0未満になったかどうかを判定。 もしくはmax関数を使う |
71 | abs関数を使って三項演算子 |
70 | 3文字なので文字列として捉え先頭と末尾を比較する。 もしくはreverse_copy関数を使用する。 |
69 | 簡単 |
68 | 今まででいちばんやさしい |
67 | 剰余演算子 三項演算子 3の倍数は3で割り切れる |
66 | 配列のsort関数 昇順なので先頭から足す もしくはmin関数を使用する。 |
65 | 限界境界を見極める良問 |
64 | 実は3の桁数は100でも200以降でも4の倍数なので下二桁だけを見れば判定できる。 |
63 | 三項演算子は結果の方が同じでなければならない。 stringとintでは使用できない |
62 | 愚直だと長くなる、発想の転換をしてグループにはかぶりがない連続の数字なので図の数字を配列の添字ととらえ、 配列の中身をグループ番号として見る。 |
61 | 簡単 三項演算子 |
60 | 簡単 三項演算子 back() front() |
59 | 簡単 toupper関数を使う |
58 | 簡単 三項演算子 |
57 | 簡単 |
56 | 二人が同じことを言っていれば正直であり、どちらか片方が違うことを言っていると嘘つきです。 |
55 | 簡単 |
54 | 簡単 1を最大値に変換する。 |
53 | 簡単 三項演算子 |
52 | 簡単 三項演算子 もしくはmax() |
51 | 簡単 場所は固定なのでピンポイントで書き換える。 |
50 | 簡単 三項演算子 型が違っていてもcinは1行で書ける。 |
49 | 簡単 |
48 | 簡単 |
47 | 簡単 全パターンを調査、もしくはすべての合計がMAX()の2倍の時、 もしくはすべての合計からMAX()を引いてMAX()と等しい場合。 |
46 | 簡単 |
45 | 簡単 |
44 | 色々 |
43 | 簡単 |
42 | 配列に入れて、 sort後に比較するか、count()を使う。 |
41 | 簡単 |
40 | 簡単 |
39 | 簡単 |
38 | 簡単 back() |
37 | 簡単 min() |
36 | 簡単 切り上げ |
35 | 簡単 比 |
34 | 簡単 三項演算子 |
33 | 4桁とも同じ数字なので1111で割り切れると求めることができる もしくは、文字列と受け取り各桁の比較を行う。 |
32 | 最大公約数、最小公倍数の問題かと身構えたが、nから始めるループでaとbの両方共余りが0を見つければいい。 難しく考えれば考えるほどドツボにはまる問題。gcd、lcmをしらなくても解ける |
31 | 簡単 三項演算子やmax()をつかう。max()を使えば一番シンプルに書ける |
30 | 簡単 3つの比較 |
29 | 簡単 文字列の超基礎問題 |
28 | 簡単 |
27 | 簡単 長方形は2つの同じ辺があるので、 同じ数字の辺以外の辺が答え。 |
26 | 条件をよく読むと偶数のみ与えられるので奇数はない、なので半分をかけ合わせたものが答えとなる 10の場合 1*9=9、 5*5=25 と半分にした時が答えだと直感でわかる。 |
25 | ちょい難しい 文字列の添字のスタートは0から、単純に割り算と剰余で2次元配列の位置を取り出そうとすると一つずれる。 なので、nを-1して位置を調整するとシンプルに書ける。 これは2次元配列として見ると楽。 わからなければデータセットを用意する。 2重ループは・・・ |
24 | 紙に書いて条件を整理してからプログラムを書く。 |
23 | 10で割れば10の桁が、10の剰余を求めれば1の桁が得られる。 もしくは、文字列として受け取り、char s[0]-'0’で引くと数字が得られる。 |
22 | 200点問題ぐらいの手応え。 初日をカウントするのを忘れてWA |
21 | 1しか考えず、nを表示、1をn回ループで表示すればok |
20 | 簡単 三項演算子 |
19 | 簡単 3つの合計から最大値と最小値を引く max()とmin() |
18 | めんどう 入力した数字と ソートした数字を比較して順位をつける。 他には18A-2、配列として数字を受け取り、それを別の場所にソートをして、差を比較し順位の番号が来た時に表示する。 |
17 | ループ入力にして、その時と同時に合計してしまうと楽。 |
16 | 今まででいちばんやさしい 三項演算子 |
15 | 簡単 三項演算子 size()を使う。 |
14 | 三項演算子 剰余の剰余は0 |
13 | 簡単 大文字の’A”を引けば数字が出てくる。0からなので+1しておく。 |
12 | 今まででいちばんやさしい |
11 | 今まででいちばんやさしい 三項演算子 |
10 | 今まででいちばんやさしい |
9 | 今まででいちばんやさしい 切り上げをどう扱うか? 三項演算子 +1 % |
8 | 今まででいちばんやさしい |
7 | 今まででいちばんやさしい |
6 | 今まででいちばんやさしい 三項演算子 |
5 | 今まででいちばんやさしい |
4 | 今まででいちばんやさしい |
3 | 実数で扱う 整数のみでも可能 |
2 | 簡単 max()を使う |
1 | 今まででいちばんやさしい |