matthew as a q.

競技プログラミングメイン

Diverta Programming Contest 2参加記

問題総評

A

N-K

Submission #5920234 - diverta 2019 Programming Contest 2

B

一番多く存在する差の組み合わせの数を数えて、全体から引く。

Submission #5930048 - diverta 2019 Programming Contest 2

C

解説と他の方の提出を見ての理解。

ans = max - min + 残りの絶対値の和 ansを作るためには、minから0以上の値を引く操作をした結果と、maxから負の値を引く操作をした結果を出力すればよい。

Submission #5941282 - diverta 2019 Programming Contest 2

D

解説読みました。

ナップサック2回やる

未提出。

E, F

まだわかっていません。

tips

Tupleの比較

Tupleオブジェクト同士の==比較だと、同一インスタンスのときのみtrueとなる。 値が一致しているときにtrueとなるようにするには、以下のように要素同士を比較する。

var c = diffPairs.Where(e => e.Item1 == num.Item1 && e.Item2 == num.Item2);

特定の値のindexをArrayから取得する

IndexOf:最初から見ていったときに、最初に合致した値のIndexを返す LastIndexOf:最後から見ていったときに、最初に合致した値のIndexを返す

int maxIndex = Array.IndexOf(array, max);
int minIndex = Array.LastIndexOf(array, min); 

出力の高速化

使えそうなので利用。 コードは以下より引用。 C#で競技プログラミングをし続ける人のためのTips - Qiita

var sw = new StreamWriter(Console.OpenStandardOutput()){AutoFlush = false};
Console.SetOut(sw);
/*何らかの出力処理*/
Console.Out.Flush();

Arrayをインデックス付きで走査

var others = numbers.Where((num, i) => i != maxIndex);

配列の絶対値の和をLinq

int sum = array.Sum(Math.Abs)