SlideShare a Scribd company logo
1 of 18
AtCoder Beginner Contest 002
解説
AtCoder株式会社 代表取締役
高橋 直大
A問題 問題概要
• 2つの数字が与えられる
• 大きい方を出力しなさい
A問題 解説
• まず、2つの数字を読み込む。
– C言語ならscanf、javaならscannerを使うなど
– 解らない場合は、「標準入力」について調べよう

• 次に、その2つを比較する
– 比較方法はさまざま
• Ifと不等号を使う方法
• Maxなどの予め組み込まれている関数を使って、大きい方を
取得する

• 大きい方を出力する
– C言語ならprintf、javaならSystem.out.printlnなど
– 解らない場合は「標準出力」について調べよう!
– 改行なしでの出力は不正解になるから気を付けよ
う!
B問題 問題概要
• 30文字以下の文字列が与えられる
• 母音だけを除いて出力しなさい
B問題 解説
• まず文字列を標準入力で読み込む
• 空の文字列をあらかじめ用意しておく
– String ret = “”; など

• それぞれの文字に対し、子音のみを別の
文字列に付け加える
– If(子音かどうかの判定) ret += input[i];

• 最後に、作成した文字列を出力する

など
B問題 その他の解き方
• 言語に組み込まれたreplace機能などを
使って、a,i,u,e,oだけ取り除いてしまう
• 判定後に別の文字列に格納するのではな
く、1文字ずつ出力してしまい、最後に
改行を出力する
C問題 解説
• 2次元平面上に存在する、3つの点のx座
標、y座標が与えられる
• それら3つの点で構成される三角形の面積
を求めなさい
C問題 解説
• 符号付面積の公式を使おう!
– (0, 0), (a, b), (c, d)の3点があるとする
– 面積S = |ad – bc|/2を利用する
– 実際に与えられる点は(0, 0)に必ずあるわけで
はないが、平行移動すれば良い。
• (a, b), (c, d), (e, f)であれば、
• (0, 0), (c-a, d-b), (e-a, f-b)に平行移動しても面積は変
わらない。
C問題 注意点
• 答えが大きくなるのに注意しよう!
– phpなど一部の言語だと、出力方法によっては、
2e+6などの指数表示になってしまう。

• 割り算に気を付けよう!
– 答えが小数となる場合、整数同士の割り算をする
と、誤答になってしまう。
• 7 / 2などだと3になってしまうのを気を付けましょう

• 符号付面積を使う場合、絶対値をつけよう!
– 付け忘れると、面積がマイナスになってしまうこ
とがある
C問題 その他の回答
• 四角で包んで、端の三角形を引いていく
– バグりやすいのでお勧めしません。

• 回転させ、(底辺)×(高さ)÷2で求め
る
– 問題ないですが、回転作業が面倒?

• ヘロンの公式を使う
– 辺の長さa, b, cの三角形の面積
– T = √(s(s-a)(s-b)(s-c))
– それを知ってるなら符号付面積も覚えましょ
う
D問題 問題概要
• N人に対して、M個の知人関係が与えられ
る。
– iさんとjさんが知人である、というような情報

• ここで、「全員が全員のことを知ってい
る派閥」のうち、出来るだけ人数が多い
ものを作りたい。
• その人数の最大値を求めなさい。
D問題 解説
• 「最大クリーク問題」と呼ばれる有名問
題
– 無向グラフにおいて、頂点の部分集合Cに対
し、Cに含まれるあらゆる2つの頂点を繋ぐ辺
が存在するようなCを、クリークと呼ぶ。
• 今回はそのクリークのうち、最大のものを調べる

– NP困難の問題であることが知られている

• ・・・が、こんな難しいことを知ってい
る必要はありません!
D問題 解説
• 全てのパターンを試す!
• 例えば、A,B,Cの3人であれば、
– {A} {B} {C} {A,B} {B,C} {A,C} {A,B,C}の7通り

• 12人の場合も、一人一人に対して、派閥
に入れる・入れないが2通りあるので、
2^12で2048通り!
– 実際は、0人派閥はあり得ないので2047通り

• これくらいであれば、どの言語でもすべ
てのパターンを試せます。
D言語 解説
• パターンの調べ方1
– bitを利用した方法
• 例えば、3人であれば、1から7までのループを回す
• 2進数にすると、001, 010, 011, 100, 101, 110, 111
• 各数字に対し、どの桁が1になっているかを列挙す
る
– それぞれ{0} {1} {0 1} {2} {0 2} {1 2} {0 1 2}

• これを利用すると、全通り調べることが出来る
D問題 解説
• パターンの調べ方2
– 再帰関数を使って調べる
• 深さ優先探索の要領で、人数分探索を行う
D問題 解説
• 全パターン調べたら、派閥を作ることが
出来たパターンの中で、最も人数が多
かった派閥の人数を出力すれば良い。
– 1人派閥しか出来ない場合もあるので注意!
D問題 誤った解法
• 適当な貪欲法を使ってはダメ。
• 下のような方法は全て不正解となります
– 上から順番に、派閥に加えられる人を派閥に
加える
– 友人が多い人から派閥に入れていく
– 派閥を作りづらそうな人を除外していく

• 確実に正しい答えを返す回答を作る癖を
つけましょう!
D問題 実装が難しい場合
• 他の人のソースコードを見てみよう!
– bitを使った提出例
• climpetさんの回答 C++
– http://abc002.contest.atcoder.jp/submissions/110897

• 葉月怜夢さんの回答 Ruby
– http://abc002.contest.atcoder.jp/submissions/111299

– 深さ優先探索を使った提出例
• おたっくすさんの回答 C++
– http://abc002.contest.atcoder.jp/submissions/110949

More Related Content

What's hot

AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Inc.
 
AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Inc.
 
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Inc.
 
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説AtCoder Inc.
 
AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説AtCoder Inc.
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Inc.
 
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Inc.
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Inc.
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説AtCoder Inc.
 
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Inc.
 
AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Inc.
 
AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説AtCoder Inc.
 
AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説AtCoder Inc.
 
AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Inc.
 
AtCoder Regular Contest 025 解説
AtCoder Regular Contest 025 解説AtCoder Regular Contest 025 解説
AtCoder Regular Contest 025 解説AtCoder Inc.
 
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Inc.
 
AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説AtCoder Inc.
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Inc.
 

What's hot (20)

AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説
 
AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説
 
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説
 
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
 
AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
 
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説
 
abc027
abc027abc027
abc027
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
 
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説
 
AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説
 
AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説
 
AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説
 
AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説
 
AtCoder Regular Contest 025 解説
AtCoder Regular Contest 025 解説AtCoder Regular Contest 025 解説
AtCoder Regular Contest 025 解説
 
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説
 
ABC001 解説
ABC001 解説ABC001 解説
ABC001 解説
 
AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 

More from AtCoder Inc.

AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoder Inc.
 
Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2AtCoder Inc.
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説AtCoder Inc.
 
Chokudai Contest 001
Chokudai Contest 001Chokudai Contest 001
Chokudai Contest 001AtCoder Inc.
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Inc.
 
AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Inc.
 
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説AtCoder Inc.
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Inc.
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説AtCoder Inc.
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説AtCoder Inc.
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Inc.
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説AtCoder Inc.
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説AtCoder Inc.
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Inc.
 
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Inc.
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説AtCoder Inc.
 
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Inc.
 

More from AtCoder Inc. (20)

TCO2017R1
TCO2017R1TCO2017R1
TCO2017R1
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
 
Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
 
Chokudai Contest 001
Chokudai Contest 001Chokudai Contest 001
Chokudai Contest 001
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説
 
AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048
 
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説
 
arc047
arc047arc047
arc047
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
 
abc031
abc031abc031
abc031
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説
 
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説
 

AtCoder Beginner Contest 002 解説