素敵な夜ですね。
C#の環境構築について、導入かつちょっとは戦える状態を検討しました。記述していきます。
自分で見直す用の記事なので、書くことを選ばず導入知識全般書いて進行していきます。
より具体的な勉強法や問題・手法等は後日の競プロ初学ログにて。
考えなければならないC#の弱点について
@u_n_i_r_u_n やっぱ標準ライブラリの弱さですねー。
— chokudai(高橋 直大)🍆@AtCoder社長 (@chokudai) 2015年3月3日
・優先度付きキューが存在しない
・ソートがすぐO(n^2)になって死ぬ
・平衡二分木についていないとほぼ意味がないlowerbound等の機能がない
などなどです>< (ここら辺自分で書いていいなら書くレベル)
>・優先度付きキューが存在しない
>・ソートがすぐO(n^2)になって死ぬ
>・平衡二分木についていないとほぼ意味がないlowerbound等の機能がない
>long double
>UpperBound/LowerBound
>swap
>Priority Queue
>deque
>set/map の upperbound/lowerbound
>next_permutation
>pair
>#define
>数値であることを表す interface
>ICPCで使えない
>AOJで使えない
>配列などの初期化がつらい
>実行時間がつらい
>使っている人があまりいない
多すぎる!!!!!
ただ、おそらく緑には関係ないので無視しました。
Visual Studioを導入
VSCodeのほうがかっこいいので好きですが各種楽なのでVisual studioを使いました。
こんなものを見つけました。最悪これで。
https://try.dot.net/
by qiita.com
Atcoderに登録
省略
テンプレート
毎回ベタ打ちは辛いです。
C#erの方のコードを継ぎ接ぎさせていただいた、オリジナル度0のテンプレートを用意しました。
プロジェクトを作りProgram.csをすべて書き換えて使えます。
// ABC999999999999 using System;using System.Collections.Generic; using System.IO;using System.Linq; using static System.Math;using System.Text; using System.Threading;using System.Globalization; using System.Runtime.CompilerServices;using Lib.Util; using System.Numerics; public class Program { //1の時だけ文字入力待ちが発生。VSのデバッグ用にたまに使う。 const int DEBUG = 0; ////////////////解いている問題を入れる↓ public static void Problem() { ProblemA(); } //各問題のコード public static void ProblemA() { var sc = new Scanner(); char c = sc.NextChar(); Console.WriteLine(answer); } public static void ProblemB(){ var sc = new Scanner(); } public static void ProblemC(){ var sc = new Scanner(); } public static void Main(string[] args){ //出力速度UP① var sw = new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }; Console.SetOut(sw); //冒頭の定義に従い各問の関数呼び出し Problem(); //出力速度UP② Console.Out.Flush(); //Visual Studio上のデバッグ用。DEBUG定数が1の時のみ動作。 if (DEBUG == 1){ Console.ReadKey(); } if (args.Any()) Console.ReadKey(); } } namespace Lib.Util{ //以下全て借り物 class Scanner { private string[] _line; private int _index; private const char Separator = ' '; //コンストラクタでindexを0に、lineを配列に初期化 public Scanner() { _line = new string[0]; _index = 0; } public string Next() { while (_index >= _line.Length) { _line = Console.ReadLine().Split(Separator); _index = 0; } return _line[_index++]; } public int NextInt() => int.Parse(Next()); public long NextLong() => long.Parse(Next()); public double NextDouble() => double.Parse(Next()); public decimal NextDecimal() => decimal.Parse(Next()); public char NextChar() => Next()[0]; public char[] NextChars() => Next().ToCharArray(); public string[] Array() { _line = Console.ReadLine().Split(Separator); _index = _line.Length; return _line; } public int[] Ints() => Array().Select(int.Parse).ToArray(); public long[] Longs() => Array().Select(long.Parse).ToArray(); public double[] Doubles() => Array().Select(double.Parse).ToArray(); public decimal[] Decimals() => Array().Select(decimal.Parse).ToArray(); } // 付け足していく class LittleMethods{ } } // thanks // https://atcoder.jp/contests/abc171/submissions/14526247 // https://atcoder.jp/contests/abc171/submissions/14526315 // https://atcoder.jp/contests/abc171/submissions/14527040 // https://atcoder.jp/contests/abc171/submissions/14527118
自分のソースではLib部分にちょこちょこ付け加える予定で、
完成の暁はComproSimarmLibと名付ける予定です。
Simarmはしまーむと読みます。可愛いですね。
usingが多い? よくわからないんです
蓄積する
その1。解いた問題には一行ずつコメントを付けていっています。
コードを再利用しやすくするため。
その2。使い回しが効きそうな部分は取り出して保存しようと思っています。
Visual Studio のスニペットを自作する方法 │ Web備忘録
( VSCode でスニペットを自作する方法 │ Web備忘録 )
先述のC#の弱点についてはAtcoderProblemを解いていて必要な問題が出たら他の人の回答を拝見し拝借。
え? 楽をするな? うるせ~知らね~
FINAL FANT
ASY
本文に書いていない参考文献 心よりお礼申し上げます。
他沢山