DOに選出されSDOI2010

\(ラウンドワン〜D1T1 \)地球外ヤスデ

\(BSOJ2793 \) -ガウス消去XOR方程式ソリューション

ブリーフ

そこ\(N- \)\(\ {a_iを\} \
) が得られる\(M \)番目の情報を、情報の各所与の\(\ displaystyle {(\ sum_ {iは1} ^ M A_ {b_i = })\ BMOD 2} \) \(\ {B_i \} \)である\({1,2、\ cdots、 N} \) のサブセット)
は可能な値を決定するために、少なくともいくつかの操作を必要とします

解決

\(70pts' \)

それは与えられた情報に変換することができる(\ displaystyle {\ oplus_ {\ I = 1} ^ M A_ {b_i}} \)

だから、発散にあるいは少なくとも質問は、方程式の数行は解けるだろう

空きエントリの数を見つけるためにガウスの消去

複雑\(O(N ^ 3) \)

\(100pts' \)

使用して、ガウス消去無駄なXOR演算のセットを考えてみましょう\(ビットセット\)最適化された特殊なケースをXOR

複雑\(O(\ FRAC {N ^ 3} {64})\)

コード

int n,m,ans;
bitset<N> a[M];
int main(void){
    re int i,j;n=read()+1,m=read();
    for(i=1;i<=m;++i)
        for(j=1;j<=n;++j)a[i][j]=gc();
    for(i=1;i<n;++i){
        for(j=i;j<=m;++j)if(a[j][i])break;
        ans=max(ans,j);
        if(j>m)return puts("Cannot Determine"),0;
        if(i^j)swap(a[i],a[j]);
        for(j=1;j<=m;++j){if(i==j||!a[j][i])continue;a[j]^=a[i];}
    }
    printf("%d\n",ans);
    for(i=1;i<n;++i)puts((a[i][n])?"?y7M#":"Earth");
    return 0;
}

エラー

私は1 + 8行の最初のセット

\(ラウンドワン〜D1T2 \)細かい部族へ

\(BSOJ2794 \) - +後方再帰のDPを数える思想簡素化状態を補完

ブリーフ

長さを求める(は、N- \)\満たすように配置された任意の\(I \ [2、 N-1] \) 有していて\(a_iを> A_ {I- 1} \&a_iを> A_ {I + 1} \) または\ (a_iを<A_ {I-1 } \&a_iを<A_ {I + 1} \)

解決

この質問のための画像は、// \ //たちを依頼することで、数

最初の検討配置すること(\ {a_iを\} \ \ ) 、次いで満たす(\ {b_i \}(\ b_i = N-a_iを)\) を満たす要件

(最初ではないので、//その後、我々は、単一のを見つけることができるようになります(1 \)\

その後、我々は実行しない問題点このカウントを見つけるだろうが、それは私たちがして、任意の配列を構築することは容易である後方、抗構造の(法的に\(\ RIGHTARROW \)法的な)プロセスを達成するために、\(DPを\)

我々は\(1 \ RIGHTARROW I \)最初に\(J \)が設けられている配列、\(dp_ {I、J} \) 番目

  • \(J-1 \)は最初、次いで交換されていない\(J-1、jが\ ) は何の影響、寄与がありません\(dp_ {I、J- 1} \)
  • \(J-1 \)最初に、その後、削除され(\ J)\、//、\シーケンスを取得します(\ a_iを\ RIGHTARROW I-a_iを)\寄与することができます(\ dp_ {I-1、 I- J + 1} \)

注についてローリング

コード

int main(void){
    re int i,j,now=0;
    n=read(),mod=read();dp[now][2]=1;
    for(i=3;i<=n;++i){
        now^=1;
        for(j=2;j<=i;++j)dp[now][j]=Mod(dp[now][j-1]+dp[now^1][i-j+1]);
    }
    for(i=2;i<=n;++i)ans=Mod(ans+dp[now][i]);
    printf("%d\n",Mod(ans+ans));
    return 0;
}

\(ラウンドワン〜D1T3 \)大陸の覇権

\(BSOJ2795 \) -最短トポロジカル整列+

ブリーフ

有向グラフを考えると、そこになければならない彼が求めている、彼の限界点に達した後、いくつかの点で\(1 \ RIGHTARROW N \)最短

解決

実際に私たちが制限の関係を満たすことができるように制限を考慮すると、\(DAG \)最短を達成するために、トポロジ

だから我々は追加して、最短の魔法を変更\(Topsort \)に処理を

セット\(dis_xは\)を表し\(1 \ RIGHTARROW X \)最短パス(ない中間である\(Topsort \)エンドは、必ずしも要件を満たさない)が
(real_x \)\関係トポロジカル順序を満たす数を表す\(1 \ RIGHTARROW X \ )私が完了した実際の最短パス(制限)

注:各\(実\)のアップデートに\(DIS \) 更新が唯一のトポロジカル順序を保証するように、唯一の他の更新に制限終了しました

コード

コア

inline void Dijkstra(void){
    re int i,x,v,d;
    for(i=1;i<=n;++i)dis[i]=INF;
    q.push((Node){1,dis[1]=real[1]=0});
    while(!q.empty()){
        x=q.top().x,d=q.top().dis,v=max(dis[x],real[x]),q.pop();
        if(v^d)continue;
        for(i=h[x];i;i=e[i].next){
            re int y=e[i].to;
            if(v+e[i].v<dis[y]){dis[y]=v+e[i].v;if(!deg[y])q.push((Node){y,max(dis[y],real[y])});}
        }
        for(re int y:g[x]){real[y]=max(real[x],v);if(!--deg[y])q.push((Node){y,max(real[y],dis[y])});}
    }
}

\(ラウンドワン〜D2T1 \)ラクダのドア王の宝物

\(ラウンドワン〜D2T3 \)スターレーシング

\(DAG \) 右側があり、各ポイントの開始点は、すぐそこにある。各点は通過となるように、最小コストを見つけます。

借入のポイントに遭遇ポイント右

図の構成:出発点\((S、I」、1、a_iを)\) 示し\(Iは\)直接逸脱

\((S、I、1,0)、(I」、T、1,0)\)

各辺の\((X」、Y、 1、W_ {X、Y})\)

最小費用流を実行することができます

\(Round2〜D1T3 \)アメリカを殺し豚

おすすめ

転載: www.cnblogs.com/66t6/p/12076458.html