競技プログラミングのソース置場   WEB+DB 115   AOJ本   PAST本   けんちょん本   アリ本   ライブラリ   AOJ   ABC   ARC   PAST



001 競技プログラミングのテンプレート

旧サイトから移行する

    ////////////////////////////////////////////////////////////////
    // Dictionaryのデバッグ出力
    ////////////////////////////////////////////////////////////////
    foreach (var EachPair in Cnt1Dict) {
        Console.WriteLine("Cnt1Dict[{0}]={1}", EachPair.Key, EachPair.Value);
    }

    ////////////////////////////////////////////////////////////////
    // セパレータとInt型の列挙を引数として、結合したstringを返す
    ////////////////////////////////////////////////////////////////
    static string IntEnumJoin(string pSeparater, IEnumerable pEnum)
    {
        string[] StrArr = Array.ConvertAll(pEnum.ToArray(), pX => pX.ToString());
        return string.Join(pSeparater, StrArr);
    }

    ////////////////////////////////////////////////////////////////
    // IEnumerable<string>をcharの2次元配列に設定する
    ////////////////////////////////////////////////////////////////
    static char[,] CreateBanArr(IEnumerable<string> pStrEnum)
    {
        var StrList = pStrEnum.ToList();
        if (StrList.Count == 0) {
            return new char[0, 0];
        }
        int UB_X = StrList[0].Length - 1;
        int UB_Y = StrList.Count - 1;

        char[,] WillReturn = new char[UB_X + 1, UB_Y + 1];

        for (int Y = 0; Y <= UB_Y; Y++) {
            for (int X = 0; X <= UB_X; X++) {
                WillReturn[X, Y] = StrList[Y][X];
            }
        }
        return WillReturn;
    }

    ////////////////////////////////////////////////////////////////
    // 2次元配列(char型)のデバッグ出力
    ////////////////////////////////////////////////////////////////
    static void PrintBan(char[,] pBanArr)
    {
        for (int Y = 0; Y <= pBanArr.GetUpperBound(1); Y++) {
            for (int X = 0; X <= pBanArr.GetUpperBound(0); X++) {
                Console.Write(pBanArr[X, Y]);
            }
            Console.WriteLine();
        }
    }
    
    ////////////////////////////////////////////////////////////////
    // IEnumerable<string>をintの2次元配列に設定する
    ////////////////////////////////////////////////////////////////
    static int[,] CreateBanArr(IEnumerable<string> pStrEnum)
    {
        var StrList = pStrEnum.ToList();
        if (StrList.Count == 0) {
            return new int[0, 0];
        }

        int[] IntArr = { };
        Action<string> SplitAct = pStr =>
            IntArr = pStr.Split(' ').Select(pX => int.Parse(pX)).ToArray();

        SplitAct(StrList[0]);

        int UB_X = IntArr.GetUpperBound(0);
        int UB_Y = StrList.Count - 1;

        int[,] WillReturn = new int[UB_X + 1, UB_Y + 1];

        for (int Y = 0; Y <= UB_Y; Y++) {
            SplitAct(StrList[Y]);
            for (int X = 0; X <= UB_X; X++) {
                WillReturn[X, Y] = IntArr[X];
            }
        }
        return WillReturn;
    }

    ////////////////////////////////////////////////////////////////
    // 2次元配列(int型)のデバッグ出力
    ////////////////////////////////////////////////////////////////
    static void PrintBan(int[,] pBanArr)
    {
        for (int Y = 0; Y <= pBanArr.GetUpperBound(1); Y++) {
            for (int X = 0; X <= pBanArr.GetUpperBound(0); X++) {
                Console.Write(pBanArr[X, Y]);
            }
            Console.WriteLine();
        }
    }


002 C#メモ

001 STLのpartial_sort


003 データ構造

PriorityQueue
PriorityQueueは、2017年1月28日(土)のブログ参照のこと
UnionFind
UnionFindSizeInfo
RMQ
RSQ


004 素数

素因数分解し、指数[素数]なDictを返す ABC169-D Div Game
約数列挙 ABC112-D Partition
ユークリッドの互除法 ARC110-A Redundant Redundancy
最大公倍数 ARC110-A Redundant Redundancy
エラトステネスの篩
IEnumerable<int> を引数として、最大公約数と最小公倍数を返すメソッド


005 グラフ

隣接リストのデータ作成 ABC087-D People on a Line
ダイクストラ法
ワーシャルフロイド法
ベルマンフォード法
プリム法
クラスカル法


006 組み合わせ列挙

nPr、nCr、nHr を求める関数(法も指定可)
C++のnext_permutation
C++のprev_permutation
Rubyの順列
Rubyの組合せ
Rubyの重複順列
Rubyの重複組合せ
パスカルの三角形の作成(ジャグ配列をメンバ変数に持ち、法もコンストラクタで指定可)


007 合同式

ModPow(繰返し2乗法)
フェルマーの小定理で逆元を求める