チェス盤
トピックへのリンク:https://cometoj.com/contest/38/problem/B?problem_id=1535
データ範囲:わずか。
問題の解決策:
ときにすることができ、行の数が非常に小さいので、$ DP $様の圧力上昇ので。
非常に吸盤の後....
コード:
#include <iostreamの> する#include <cstdioを> する#include <CStringの> する#include <アルゴリズム> の#include <cmath> の#define N 1000010 名前空間stdを使用。 するchar * P1、P2 *、BUF [100000]。 #define NC()(P1、P2 == &&(P2 =(P1 = BUF)+関数fread(BUF、1、100000、STDIN)、P1 == P2)EOF:* P1 ++) int型RD(){ int型X = 0、F = 1。 チャーC = NC()。 一方、(C <48){ IF(C == ' - ') 、F = -1。 C = NC()。 } 一方、(C> 47){ X =(((X << 2)+ X)<< 1)+(C ^ 48)、C = NC()。 } のx * Fを返します。 } [N]、B [N] INT、[N] [2] F。 INT、N = RD()。 以下のために(INT i = 1; iが<= N; iは++){ [i]は= RD()。 } {ため(iは++; iがn = <I = 1 INT) [I] = RD()Bと、 } int型のL = N、R = 1。 以下のために(INT i = 1; iが<= N; iは++){ IF([I] || B [I]){ L = I。 ブレーク; } } 、{ - (I; I I = N INT)のための IF([I] || B [I]){ iはR =。 ブレーク; } } {(; I <= R iが++ iがLに= INT)のために ! - [1 I] [0] + [I] [I] [0] FをF = F [i]が[1]のF = [Iを- 1] [1] + B [i]は!。 F [i]が[0] =分(F [i]が[0]、F [i]を[1] + [I]!)。 F [i]を[1] =分(F [i]が[1]、F [i]が[0] + B [i]は!)。 } COUT <<分(F [R] [0]、F [R] [1])<< ENDL。 0を返します。 }