trsing’s diary

勉強、読んだ本、仕事で調べたこととかのメモ。

C#

ABC093 D - Worst Caseメモ

問題 D - Worst Case 考えたこと ペアの組み合わせとしてはと、 とだけど後者のペアをなるべく作ればペアの数を増やせる。 前提条件 ① よって ② とおく rが平方数の場合 なのでの組を作れません。未満は使用できるので個の組を二つ作れます*1。 の場合、が使…

D - AtCoder Express メモ

※texにキーワードリンクが張られて数式が認識されない場合があるため見づらくなってます。脳内補間おなしゃっす 問題 D - AtCoder Express 考えたこと 便宜のためを区間と書きます。 区間速度の修正 区間 の速度が [tex:v{i+1}] なので、区間 で出しても良い…

C# BigInteger計算量

C#

の計算時間(ms)を測定 環境 Windows 8.1 Core i5-4670K 3.40GHz メモリ16G .Net Core2.1、コードの最適化あり 結果 C\n 10 102 103 104 105 106 10 0 0 0 9 899 117362 102 0 0 0 18 1878 244316 103 0 0 0 30 2828 410290 104 0 0 0 36 3950 612554 105 0 …

ABC140 F - Many Slimes用multisetっぽいもの

追記 次の方の実装の方がちゃんとしてて使いやすそう Submission #7399290 - AtCoder Beginner Contest 140 昨日作った平衡二分探索木っぽいものを改造したらmultisetっぽいものができたっぽい。ABC140のFで確認したっぽい。 追記 これ'T'が複数の情報を持っ…

ABC140 E - Second Sum用平衡二分探索木

//平行二分探索木 class BinarySearchTree<T> where T : IComparable<T> { class node { public node left = null; public node right = null; public T key = default(T); public node parent = null; public int height; } node root = null; bool change; int h</t></t>…

C#の二次元配列でHashSet

C#

ソース public class hash2d : IEquatable<hash2d> { public long[,] array2d; public hash2d(long[,] a) { array2d = new long[a.GetLength(0), a.GetLength(1)]; Array.Copy(a, array2d, a.Length); } public override bool Equals(object obj) => Equals(obj as h</hash2d>…

C#のList/Arrayでlower_bound/upper_bound

C#

ソース public class lower_bound<T> : IComparer<T> where T : IComparable<T> { public int Compare(T x, T y) { return 0 <= x.CompareTo(y) ? 1 : -1; } } public class upper_bound<T> : IComparer<T> where T : IComparable<T> { public int Compare(T x, T y) { return </t></t></t></t></t></t>…

log4netの設定

C#

設定方法が複数あって混乱してきたのでメモ。こうすればとりあえず使えたよというとこのみ。 環境 Windows 8.1 Visual Studio 2017 共通 NuGetでlog4net (2.0.8)をインストール コンソールアプリ .Net Framework 4.6.1 log4netの設定ファイル(log4net.config…

EFFECTIVE C# 6.0/7.0 読書メモ 項目27

C#

項目27 最小限に制限されたインターフェイスを拡張メソッドにより既往拡張する インターフェイスには最小限の機能を定義しておき、拡張メソッドを用意するようにする。 インターフェイスとして定義されたメンバを最小限に抑え、 補助的な機能を拡張メソッド…

EFFECTIVE C# 6.0/7.0 読書メモ 項目26

C#

項目26 ジェネリックインターフェイスとともに古いインターフェイスを実装すること ジェネリックインターフェイスをサポートするクラスを作成するなら、非ジェネリックインターフェイスもサポートする。 ジェネリック以前のコードも多数存在しており、それら…

EFFECTIVE C# 6.0/7.0 読書メモ 項目25

C#

25 型引数がインスタンスのフィールドではない場合にはジェネリックメソッドとして定義すること 次の条件に該当しないのなら、ジェネリッククラスではなく非ジェネリッククラス内のジェネリックメソッドを定義するとよい。 型パラメータの値をクラスの内部状…

EFFECTIVE C# 6.0/7.0 読書メモ 項目24

C#

24 親クラスやインターフェイス用に特化したジェネリックメソッドを作成しないこと オーバーロード解決について。 ジェネリックメソッドは、型パラメータをそれぞれに該当するあらゆる型と一致できる。暗黙的型変換(例えば親クラスへの変換)よりも優先される…

EFFECTIVE C# 6.0/7.0 読書メモ 項目23

C#

項目23 型パラメータにおけるメソッドの制約をデリゲートとして定義する たいていの場合、制約としてクラス制約やインターフェイス制約を指定する方法が適している。.NET BCLでもIComparable<T>などが実装されていることを期待する機能が多数ある。 しかし、独</t>…

EFFECTIVE C# 6.0/7.0 読書メモ 項目22

C#

項目22 ジェネリックの共変性と反変性をサポートする 独自にインターフェイスやデリゲートを作成する場合、できる限り反変性inあるいは共変性outを設定する。 共変性と反変性をサポートするメリット 作成したインターフェイスやデリゲートの変性*1が誤用され…

EFFECTIVE C# 6.0/7.0 読書メモ 項目21

C#

項目21 破棄可能な型引数をサポートするようにジェネリック型を作成すること 型引数がIDisposableを実装している場合にも対応するようにジェネリック型を設計すること。 例1:メソッド内で型引数のインスタンスを作成して使用するようなジェネリックメソッド…

EFFECTIVE C# 6.0/7.0 読書メモ 項目20

C#

項目20 IComparableとIComparerにより順序関係を実装する IComparable<T>とIComparer<T>は順序関係を定義するインターフェイス。コレクションのソート、検索するために順序関係を定義する必要がある。 例えば'List.Sort()'では'T.CompareTo(T)'を使用する。 ICompa</t></t>…

EFFECTIVE C# 6.0/7.0 読書メモ 項目19

C#

項目19 実行時の型チェックを使用してジェネリックアルゴリズムを特化する 実行時の引数の型に応じ、その型が持つ機能に適したアルゴリズムを使用するようにする。 型引数が適切な機能を備えている場合、より効率的なアルゴリズムを効率的に実装できる。 ジ…

EFFECTIVE C# 6.0/7.0 読書メモ 項目18

C#

項目18 最低限必須となる制約を常に定義すること ジェネリック型を作成する場合、最低限必須となる制約を常に定義する。 制約 メリット 使用者やコンパイラに対して想定する機能を伝達することができる。 制約があればコンパイラはその制約が満たされている*…

EFFECTIVE C# 6.0/7.0 読書メモ 項目17

C#

項目17 標準的なDisposeパターンを実装する アンマネージリソースを持つ型のメモリ管理について。標準的な方法(Disposeパターン)を実装すること。 Disposeパターンの利点 型のユーザはIDisposableインターフェイスによりアンマネージリソースを適切なタイミ…

EFFECTIVE C# 6.0/7.0 読書メモ 項目16

C#

項目16 コンストラクタ内では仮想メソッドを呼ばないこと コンストラクタで仮想メソッドを呼び出したときの動作について。 class B { protected B() {VFunc();} protected virtual void VFunc() {Console.WriteLine("B内のVFunc");} } class Derived :B { pr…

C# LINQ Whereの戻り値メモ

C#

やりたかったこと LINQとnull条件演算子を合わせ、要素がなかったらnullを返してほしい。次の式でemp=nullになると期待。 >var lst = new List<int>(); >var emp = lst.Where(e => e > 0)?.Min(); シーケンスに要素が含まれていません + System.Linq.Enumerable.M</int>…

#項目15 不必要なオブジェクトの生成を避けること

C#

ガベージコレクタによるメモリ管理にはコストがかかる。 GCの実行条件はメモリの確保量と確保の頻度で決まる。メモリを確保すればするほどより頻繁にGCが実行され、非効率的。 参照型のオブジェクトを大量に使用すれば、アプリケーションのパフォーマンスに…

EFFECTIVE C# 6.0/7.0 読書メモ 項目14

C#

項目14 初期化ロジックの重複を最小化する コンストラクタの定義方法について 推奨方法 共通処理を行うためのコンストラクタを用意する コードの重複を避けることができ、コンストラクタ初期化子に対応するオブジェクトコードがより効率的なものとして生成さ…

EFFECTIVE C# 6.0/7.0 読書メモ 項目12、13

C#

項目12 メンバには割り当て演算子よりもオブジェクト初期化子を使用すること オブジェクト初期化子を使用するメリット コンストラクタに関わらずメンバ変数を確実に初期化することができる 将来新しいコンストラクタを追加した場合でも、メンバ変数の初期化…

EFFECTIVE C# 6.0/7.0 読書メモ 項目11

C#

11 .NETのリソース管理を理解する 優れた開発者となるには、実行環境におけるメモリやその他主要なリソースの管理方法を理解する必要がある。.NETの場合、メモリ管理やガーベジコレクタを理解すること。 ガベージコレクタ マネージヒープにおけるメモリを管…

EFFECTIVE C# 6.0/7.0 読書メモ 項目6~項目10

C#

項目6 文字列指定のAPIを使用しないこと 文字列ベースのAPIやライブラリのデメリット ・型の安全性が損なわれる ・ツールによるサポートもなくなる ・静的型付け言語における多数の利点を失う シンボル名が必要な時はnameof()式を利用するとよい。メリットは…

EFFECTIVE C# 6.0/7.0 読書メモ 項目1~項目5

C#

項目1 ローカル変数の方をなるべく暗黙的に指定すること ローカル変数の型を宣言する場合はなるべくvarを使う。 コンパイラが型を宣言する。 メリット ローカル変数の型という細部を気にせずに済み、コードの意味に注力できる。 型を自分で選択するよりコン…

読書 スラスラわかるC# 第2版

スラスラわかるC# 第2版作者: 五十嵐祐貴,岩永信之出版社/メーカー: 翔泳社発売日: 2018/11/07メディア: 単行本(ソフトカバー)この商品を含むブログを見る C#はかなり昔に入門本を読んでそれ以来必要になった箇所だけ適当につまみ食い。そんなのでも使う頻…