投稿

12月, 2019の投稿を表示しています

競技プログラミング用コピペコード集(C#)

主にAtcoderでやる競技プログラミングで再利用するために、C#で書いたコードたちを載せてみる。どれも既知のアルゴリズムなのでコピペとかして構わないけど、もし間違っていても責任はとらない。 また何かあれば追加するかも。 公約数/公倍数 最大公約数 static long Gcd(long m, long n) { if (m < n) {var t=m; m=n; n=t;} while (true) { var mod = m % n; if (mod == 0) return n; m = n; n = mod; } } ユークリッド互除法 の実装。 最小公倍数 ※2020/5/13 計算途中でのオーバーフローに対策 static long Lcm(long m, long n) { var x1 = Math.Max(m, n); var x2 = Math.Min(m, n); var gcd = Gcd(x1, x2); return x1 / gcd * x2; } 上のGcdが必要。最大公約数から最小公倍数を求める公式。 演算 累乗 ※2020/5/31 2^32でOFしてたのに対応 static long Pow(long x, long n) { long ans = 1; while (n > 0) { if (n % 2 == 1) { ans = ans * x; } n /= 2; if(n == 0) break; x = x * x; } return ans; } 通常はMath.powを使う累乗の手書き実装。n<0には対応しない。単純ループするとO(n)だが、2乗を入れ子にするアルゴリズムで実装してO(log n)。いわゆる繰り返し二乗法。 x^20 = (((x^2)^2)^2)^2 * (x^2)^2 累乗(Mod) ※2020/5/31 2^32でOFしてたのに対応 static long ModPow(long x1, long x2){ l

IISでページ単体にアクセス制限などをかける

イメージ
小ネタ。IISでは接続元のIPアドレスによってアクセス制限を設定したりできる。説明を見ると大抵フォルダー単位で設定をしているが、それをファイル単位で設定する方法。 IISマネージャで 通常はこのようにフォルダまでしか表示されていないが 上にあるアドレスバーでファイル名までパスを入力してエンターを押すと そのファイルだけツリーに表示される。これでフォルダにするのと同じようにファイルに設定を加えることができる。変な動作。 configファイル 結局のところIISマネージャで設定したものは.configファイルに書かれる。Default Web Siteの配下なら"C:\inetpub\temp\appPools\DefaultAppPool\DefaultAppPool.config"など。アクセス制限は以下のような記述。 <location path="Default Web Site/ARFusen/Contents"> <system.webServer> <security> <ipSecurity> <add ipAddress="192.168.1.1" allowed="false" /> </ipSecurity> </security> </system.webServer> </location> このpath属性にファイルのパスを入れれば別に普通にファイルでも動作する。まあでもIISマネージャーがインストールされている場合は、上書きされたりしても嫌なのでGUIで設定できたほうがいいよね。 以上 設計としてはフォルダで分けるほうが妥当なんだけど、今回は既に稼働済みのシステムでURLを変えずに特定ページのみ制限したかったのでやってみた。