概要
Windowsのツールの1つWinMergeをコマンドで実行して差分の結果をレポートとして出力する方法。
実行方法
公式のページで確認すると
WinMergeU.exe leftpath rightpath
で比較ができる。
また、比較した結果をレポートとして残したい場合は
WinMergeU.exe leftpath rightpath /or reportpath
で残すことができる。
PuTTYから踏み台サーバを経由してローカルフォワード、ダイナミックフォワードの設定をコマンドで接続したので備忘録。
目的のサーバへ接続するために一度経由するサーバ。
接続先のサーバのIPアドレスとポート番号を指定してどのポート番号で接続するようにすること。
コマンド
putty.exe 踏み台サーバのIPアドレス -L 源ポート:接続先のIPアドレス:接続先のポート番号
接続先のサーバの全ての接続先をSOCKSプロキシとして接続できるようにすること。
コマンド
putty.exe 踏み台サーバのIPアドレス -D 接続先のIPアドレス:源ポート
warning: control reaches end of non-void function [-Wreturn-type]
が出た。
問題のコード
int anc(int cnt, int n){ if(n == 1) return cnt+1; anc(cnt+1, a[n-1]); } int main() { int n; cin >> n; for(int i=1; i<n; i++) cin >> a[i]; cout << anc(0, a[n-1]) << endl; }
タイトルのwarningの内容について調べてみると再帰関数の最後にreturn
がないためにwarning が出る。
warningが出力されないように問題のコードを修正すると
int anc(int cnt, int n){ if(n == 1) return cnt+1; return anc(cnt+1, a[n-1]); // 修正箇所 } int main() { int n; cin >> n; for(int i=1; i<n; i++) cin >> a[i]; cout << anc(0, a[n-1]) << endl; }
になる。
WindowsのPowerShellでcurl
コマンドに--header
オプションを付けて実行したところ
PowerShell curl コマンドエラー Invoke-WebRequest : パラメーター 'Headers' をバインドできません。 "XXX" の値を "System.String" 型から "System.Collections.IDictionary" 型に変換できません。
というエラーが出た。
PowerShellにおけるcurl
コマンドのエイリアスを確認したところ
> Get-Alias curl CommandType Name Version Source ----------- ---- ------- ------ Alias curl -> Invoke-WebRequest
Invoke-WebRequest
コマンドのエイリアスであることが分かった。
curl
コマンドの--header
に代わるオプションを調べたところ-Headers
オプションがあり、入力方法は
Enter a hash table or dictionary.(公式のHeaders項目から引用)
であるので、ハッシュテーブルオブジェクトで入力
Invoke-WebRequrest --Header @{xxx=yyy}
で実行したところ期待通りの動きをした。
Templates
でRecording
を選択後にCreate
ボタンをクリック
HTTP(S) Test Script Recorder
のState
のStart
ボタンをクリック
クリック後に以下のようなポップアップが出てくる
上記のポップアップの後に/apache-jmeter-5.5/bin/ApacheJMeterTemporaryRootCA.crt
が生成されていることを確認
Macの場合は上記のファイルをダブルクリックしたときに証明書の追加
ポップアップが表示
ポップアップの追加
ボタンをクリックすれば証明書がインポートされる
競技プログラミングにて二分探索について勉強しているときにC++にはlower_bound
という関数が用意されていた。
せっかくなので、lower_bound関数の使い方を調べてAtCoderの問題を1問解いてみた。
公式
vector<int> v(n); int value; sort(a.begin(), a.end()); auto iter = lower_bound(v.begin(), v.end(), value);
上記のC++日本語リファレンスによるとあらかじめソートされたvectorの中から要素となる value の値以上のイテレータを戻り値として返す。
計算量は二分探索のアルゴリズムなので、
と高速。
また、 イテレータをインデックスとして扱いたい場合には
size_t pos = distance(v.begin(), iter);
とdistance
関数を使うことでposにどの位置で見つけたか格納することができる。
競プロ典型90問の内の1問から
ABC 競技プログラミング塾には個のクラスがあり、番号 のクラスはレーティング の生徒を対象としています。
今、人の生徒がこの塾に入塾しようとしています。
番号の生徒のレーティングは です。
各生徒は自分に合わないレベルのクラスに行くと不満になります。
各生徒について、その不満度は次のように定義されます。
・対象レーティングと自分のレーティングの差の絶対値、すなわち
それぞれについて、番号の生徒の不満度として考えられる最小値を求めてください。
ただし、1人も入らないクラス、複数人から成るクラスがあっても良いものとします。
・
・
・
・
・入力はすべて整数
それぞれについて、標準出力に答えを一行ずつ、総計行に出力してください。
4 4000 4400 5000 3200 3 3312 2992 4229
112 208 171
上記の問題の解くときの考え方として
に対して配列の中で一番近い数字を見つける。
制約が、ともに300000と大きいため二分探索を使って数字を見つける。
以上、2点を踏まえてプログラムに書き起こすと下記の通り。
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n, q; cin >> n; vector<int> a(n); for(int i=0; i<n; i++) cin >> a[i]; sort(a.begin(), a.end()); cin >> q; for(int i=0; i<q; i++){ int b; cin >> b; // 二分探索 auto iter = lower_bound(a.begin(), a.end(), b); int idx = distance(a.begin(), iter); if(idx == 0) cout << abs(a[idx] - b) << endl; else cout << min(abs(a[idx] - b), abs(a[idx-1] - b)) << endl; } }
計算量もとなるので間に合う。