POJ 3276 (一維開關問題)

2021-07-23 21:00:38 字數 701 閱讀 2804

現在有 n 個牛站一排, 給你每個牛的方向。

你現在每次只能反轉連續 k 個牛的方向,問把所有牛反轉到面向前方

所需要的最少操作次數 m, 以及 k的值。

每次反轉乙個區間後, 如果左端的牛方向真確, 我們便不去考慮這個牛了。

故從左到右掃一邊即可, 列舉k的值, 整個複雜度 o(

n2);

#include 

#include

#include

#include

using

namespace

std;

const

int maxn = 1e5 + 131;

int n, dir[maxn];

int f[maxn];

int calc(int k)

sum += f[i];

if(i-k+1 >= 0)

}//判斷

for(int i = n-k+1; i if((dir[i]+sum)%2)

if(i-k+1 >= 0)

}return res;

}void solve()

}printf("%d %d\n", k, m);

}int main()

solve();

}return

0;}

poj3276(開關問題)

可算明白了.bbfbfbb 我們到達第三個f,我們需反轉。標記一下在3出反轉了 vis 3 1 對以後的影響是 1.用sum記載影響程度即sum 1 我們到達第四個,雖然是b,但是收到前面影響 sum 1 也就是變成f了。我們需要反轉。標記vis 4 1.sum再 1.即sum 2 也就是第五個會受...

POJ 3276 開關問題

題目鏈結 題目大意 有一些牛,頭要麼朝前要麼朝後,現在要求確定乙個連續反轉牛頭的區間k,使得所有牛都朝前,且反轉次數m盡可能小。解題思路 首先不要看錯題意了,不是求最小k,不要二分。而且反轉區間長度一定是k,小於k是不能反轉的。很明顯得列舉k 1.n 並且有以下反轉思路 從第一頭牛開始,如果朝前,不...

poj3276 反轉 開關問題

題目大意 給你乙個長度為n的字串,包含字母f和b 你可以把區間k 乙個常數 內的所有f變成b,b變成f。為了把這個字串都變成f,求變化的最小次數和其對應的k的值 分析 挑戰程式設計競賽 反轉法的例題,此做法非書上做法 列舉k,對於每個k,只要序列最左端的b變成f,然後依次變化,得到答案 列舉起點然後...