MENU

テクニック解説

【競技プログラミング】1~2K+1の順列2つの和でK+2~3K+2の順列が作れる話

ICPC海外リージョナルとかyukicoderとかatcoderで見たことある気がする(問題はatcoderのNon-triangular Triplets位しか思い出せない) 1,2,3,4,5 + 5,3,1,4,2 = 6,5,4,8,7 1,2,3,4,5,6,7 + 7,5,3,1,6,4,2 = 8,7,6,5,4,11,10,9 一般化は 1,2,3,...,2K+1 2K+1,2…

え、10重ループくらい10秒でかけますよね?これってゴリ押し解法なんですか?

これを #define extrep(v,...) for(auto v:make_mat_impl({__VA_ARGS__})) vector<vector<long long>> make_mat_impl(vector<long long> v){ if(v.empty())return vector<vector<long long>>(1,vector<long long>()); long long n=v.back(); v.pop_back(); vector<vector<long long>> ret; vector<vector<long long>> tmp=make…</vector<long></vector<long></long></vector<long></long></vector<long>

rustでN次元配列を楽に作るマクロ

macro_rules! make_vec{ ( $val:expr , $head:expr)=>{ vec![$val;$head] }; ( $val:expr , $head:expr , $($tail:expr),+ )=>{ vec![make_vec!($val,$($tail),+);$head] }; } で作れます let mut dp=make_vec!(0,h,w); のように使います C++よりは元々作り…

【C++】木の回転を3行で書く

試してないのでわからないのですがtie(t->r,t->r->l,t)=make_tuple(t->r->l,t,t->r);で木の回転が出来そう?— 5%の確率で橙パフォをとるhotman (@hotmanww) October 30, 2019 昔考えたやつをブログ化 //npはnodeのポインタ、b=1で右回転 ch[1]は右の子、ch[…

最大部分配列問題(連続部分列の総和の最大値)をセグ木に載せる

ark4rk.hatenablog.comこれを事前に読んで欲しいです。 分割統治法の方針でセグ木に乗せられます これにより、 点更新 [l,r)間の連続部分列における総和の最大値を求める が出来ます からなるベクトルを考えると、これがモノイドになっています。試しにベク…

Ax=bの解の存在判定をO(N×M×min(N,M))で行う

拡大係数行列を考える。 この時、の時のみ解が存在する事が知られている。 転置行列についてもrankは同じであるため、で計算が出来る。 からでが求められる事から転置行列においては2倍の定数倍高速化も可能である。