1 #define maxn 30002 2 #define _for(i,a,b) for(int i = (a);i < (b);i ++) 3 int dir[maxn],f[maxn],n; 4 class Solution 5 { 6 public: 7 int solve(int k) 8 { 9 memset(f,0,sizeof(f)); 10 int sum=0,res=0; 11 for(int i=0; i+k<=n; i++) 12 { 13 if((dir[i] + sum) %2== 1) 14 { 15 f[i]=1; 16 res++; 17 } 18 sum+=f[i]; 19 if(i-k+1>=0) sum-=f[i-k+1]; 20 } 21 22 for(int i=n-k+1; i<n; i++) 23 { 24 if((dir[i] + sum) %2== 1) return -1; 25 if(i-k+1>=0) sum-=f[i-k+1]; 26 } 27 return res; 28 } 29 30 int minKBitFlips(vector<int>& A, int K) 31 { 32 n = A.size(); 33 _for(i,0,n) 34 if(A[i]) 35 dir[i] = 0; 36 else 37 dir[i] = 1; 38 return solve(K); 39 } 40 };
经典ACM问题——奶牛掉头
原文地址:https://www.cnblogs.com/Asurudo/p/10390647.html
时间: 2024-10-29 17:58:01