bzoj 1704: [Usaco2007 Mar]Face The Right Way 自动转身机【贪心+差分】
2018-05-25 18:09
591 查看
首先O(n^3)的贪心很好想,就是枚举k然后从前往后扫,扫到反就翻转区间
然后考虑优化掉翻转区间维,就是搞成差分的形式,在翻转区间的尾部打上标记,再用一个变量维护当前的翻转次数,加到当前状态上来判断是否需要翻转即可
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=5005; int n,a ,b ,ans=1e9,sum,f ; char s[5]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%s",s); if(s[0]=='B') a[i]=1; } for(int k=1;k<=n;k++) { memset(f,0,sizeof(f)); int su=0,pd=1,t=0; for(int i=1;i<=n-k+1;i++) { if((a[i]+t)&1==1) f[i+k-1]++,t^=1,su++; if(f[i]) t^=1,f[i]=0; } for(int i=n-k+2;i<=n;i++) { if((a[i]+t)&1==1) pd=0; if(f[i]) t^=1; f[i]=0; } if(pd&&su<ans) ans=su,sum=k; } printf("%d %d\n",sum,ans); return 0; }
相关文章推荐
- [bzoj1704][Usaco2007 Mar]Face The Right Way 自动转身机_贪心
- bzoj 1704: [Usaco2007 Mar]Face The Right Way 自动转身机 -- 贪心
- BZOJ 1704: [Usaco2007 Mar]Face The Right Way 自动转身机( 贪心 )
- 【bzoj1704】[Usaco2007 Mar]Face The Right Way 自动转身机 贪心
- 【BZOJ】1704: [Usaco2007 Mar]Face The Right Way 自动转身机
- bzoj 1704: [Usaco2007 Mar]Face The Right Way 自动转身机
- bzoj1704/poj3276[Usaco2007 Mar]Face The Right Way自动转身机
- bzoj1704: [Usaco2007 Mar]Face The Right Way 自动转身机
- 1704: [Usaco2007 Mar]Face The Right Way 自动转身机
- bzoj1704/poj3276[Usaco2007 Mar]Face The Right Way自动转身机
- BZOJ1704: [Usaco2007 Mar]Face The Right Way 自动转身机
- 【bzoj1703】[Usaco2007 Mar]Ranking the Cows 奶牛排名
- 【bzoj1634】[Usaco2007 Jan]Protecting the Flowers 护花 贪心
- 【dfs】BZOJ1703-[Usaco2007 Mar]Ranking the Cows 奶牛排名
- 【BZOJ】1634: [Usaco2007 Jan]Protecting the Flowers 护花(贪心)
- Bzoj 1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 传递闭包,bitset
- POJ 3276 Face The Right Way [反转 (贪心)] 《挑战程序设计竞赛》 3.2
- 【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup
- BZOJ1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名
- 【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup