懲りずにABC134に参加した話
何かうまくいく問題もあるけど、Dまで安定して解けるようにはなりたい
問題:
https://atcoder.jp/contests/abc134
上記の通り、いつでも復習できるな
解説:
A - Dodecagon
半径 の円に内接する正十二角形の面積は であることが知られています。
整数 が与えられるので、半径 の円に内接する正十二角形の面積を求めて下さい。
入力は以下の形式で標準入力から与えられます。
正十二角形の面積を表す整数を出力してください。
………とのこと、まぁこれは流石にね
- #include<stdio.h>
- int main(){
- int r,sum;
- scanf("%d",&r);
- sum = 3*r*r;
- printf("%d",sum);
- return 0;
- }
見たまんま記法
B - Golden Apple
一列に並んだ 本の林檎の木のうちいずれかに黄金の林檎が実ると言われています。
そこで、何人かの監視員を配置してどの林檎の木もいずれかの監視員に監視された状態にしたいです。
それぞれの監視員は 本の木のうちいずれかに配置します。便宜上、これらの木に から までの番号をつけます。番号 の木に配置された監視員は、番号が 以上 以下のすべての林檎の木を監視します。
条件を満たすために少なくとも何人の監視員を配置する必要があるか求めてください。
入力は以下の形式で標準入力から与えられる。
条件を満たすために配置する必要のある監視員の人数の最小値を出力せよ。
問題の入力例を見てみると、6 2と入力した場合、答えが2になることから、観測範囲は自分を含めて入力されたDだけ増えることが分かった。(例の場合は観測者を含めて3本まで見れる)以下が実際の解答例である
- #include<stdio.h>
- int main(){
- int n,d,range;
- scanf("%d%d",&n,&d);
- range=d*2+1;
- if(n%range==0) printf("%d",n/range);
- else printf("%d",n/range+1);
- return 0;
- }
range=d*2+1の意味は、観測者は-d分まで観測の手を広げることができるから、増えた範囲dを二倍することで解決。本数を範囲で割って、余りが0になったら最小値出力、余りが出たら割れない分1だけ足して出力。シンプルな問題で助かった。
C - Exception Handling
長さ の数列 が与えられます。 以上 以下の各整数
に対し、次の問いに答えてください。
- 数列中の
を除く 個の要素のうちの最大の値を求めよ。
入力は以下の形式で標準入力から与えられる。
行出力せよ。 行目 () に、数列中の を除く 個の要素のうちの最大の値を出力すること。
反省、改善点: