現在有 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,然後依次變化,得到答案 列舉起點然後...