Gym101620C累積コード

リンク
メモリ検索。
検索状態に設定されている(\(N、K、今、FLG))\、の深さを表し(N- \)を\、既存の\(K \)は Prüferコードビット、残り\(今\)ニーズを計算すること位置、親エッジがある場合。
現在のポイント場合\(X \) その後、答えは三元構造として標識される\((A、B、C)\) 回答を表している(AX + B + C \ \ lfloor \ FRAC X2 \ rfloor \)
現在のセットポイントへの答え\((A、B、C)は\) 答えの息子である((A、B、C)\)\マージする方法を検討します。
息子左:\(A \左矢印2A + A + C、B \左矢印B + B \。)
右ソン:\(A \左矢印2A + A + C、B \左矢印B + A + B \。)
そして、時間の複雑さのメモリ使用率の最適化を検討してください。
場合にのみ番号Prüferコードに対応する第一のサブツリー\([A、A +(1-M)D] \) および専用メモリ側の親のサブツリー。
我々セットメモリの状態\(F_ {K、I} \)のようなルートノードを表し(X \)\、の深さ\(K \)を、任意の\(P「_ {iが+ JDは} \) 計算される回答のニーズの点で答え(F_ {K、I} \ \) 答えは構造によって表される(\(P「= \ {p'_nは\} \)サブツリーPrüferコードです)。
すべての辺が親の深さを持っているので、\(K \)に関連するオフセット最初のこの部分にのみ答えがサブツリーPrüferコード内のポイントを選択するように、完全なバイナリツリーを削除するためには、一定です。
我々だけレコード\(K \ル15 \)状態、その結果、単一の検索のための時間の複雑\(2 ^ {\ FRAC K2} \)

#include<cstdio>
#include<algorithm>
using i64=long long;
int read(){int x;scanf("%d",&x);return x;}
const int N=17,M=32768;
struct node
{
    i64 a,b,c;
    node(i64 A=0,i64 B=0,i64 C=0):a(A),b(B),c(C){};
    void mergel(node x){a+=x.a+x.a+x.c,b+=x.b;}
    void merger(node x){a+=x.a+x.a+x.c,b+=x.a+x.b;}
}f[N][M];
int st,d,m,ed,num,id[N][M];
node dfs(int n,int k,int now,int flg)
{
    if(now<=0) return node();
    int p=((st-k)%d+d)%d,size,pos;node ans;
    if(!p) p=d;
    p=std::max(p,st-k);
    if(p>=1<<n) return node();
    if(n<=1) return node(0,0,1);
    if(n<=15&&flg&&k+1>=st&&k+(1<<n)-1<=ed&&id[n][p]==num) return f[n][p];
    if(p<=(1<<(n-1))-1) size=(std::min(ed-k,(1<<(n-1))-1)-p)/d+1,ans.mergel(dfs(n-1,k,size,1)),now-=size;
    if(!flg) if(pos=k+(1<<(n-1)),!((pos-st)%d)&&st<=pos&&pos<=ed) ans.a+=2,++ans.b,--now;
    if(now>0) pos=k+(1<<n)-1,ans.merger(dfs(n-1,k+(1<<(n-1))-flg,now-(flg&&!((pos-st)%d)&&st<=pos&&pos<=ed),flg));
    if(flg) if(pos=k+(1<<n)-1,!((pos-st)%d)&&st<=pos&&pos<=ed) ++ans.c;
    if(n<=15&&flg&&k+1>=st&&k+(1<<n)-1<=ed) id[n][p]=num,f[n][p]=ans;
    return ans;
}

int main()
{
    for(int dep=read(),Q=read();Q;--Q)
    {
	++num,st=read(),d=read(),m=read(),ed=st+d*(m-1);
	node ans=dfs(dep,0,m,0);printf("%lld\n",ans.a+ans.b);
    }
}

おすすめ

転載: www.cnblogs.com/cjoierShiina-Mashiro/p/12602811.html