1704: [Usaco2007 Mar]Face The Right Way 自动转身机
2017-12-25 21:04
453 查看
题目链接
题目大意:有一个长度为n的01序列,需要全部置为1,操作一次可以选择一个固定的k(每次操作均相同),将连续k个数取反
求出k,使得在操作次数最少的前提下k尽量小
题解:枚举k,顺序扫描,每当遇到一个为0的数,就以它为起点进行修改,修改用差分实现
我的收获:……
题目大意:有一个长度为n的01序列,需要全部置为1,操作一次可以选择一个固定的k(每次操作均相同),将连续k个数取反
求出k,使得在操作次数最少的前提下k尽量小
题解:枚举k,顺序扫描,每当遇到一个为0的数,就以它为起点进行修改,修改用差分实现
我的收获:……
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <ctime> #include <cmath> #include <cstdlib> using namespace std; const int M=5005; int n,a[M],b[M],c[M]; int mi_cnt,mi_tim=M; char str[5]; void solve(int k) { memcpy(b,a,sizeof(b)); memset(c,0,sizeof(c)); int nowtime=0; for(int i=1;i<=n;i++){ c[i]+=c[i-1],b[i]+=c[i]; if(b[i]&1){ if(i+k-1>n) return ; else c[i]++,c[i+k]--,nowtime++; } } if(nowtime<mi_tim) mi_tim=nowtime,mi_cnt=k; } void work() { solve(20); for(int i=1;i<=n;i++) solve(i); cout<<mi_cnt<<" "<<mi_tim<<endl; } void init() { cin>>n; for(int i=1;i<=n;i++) scanf("%s",str),a[i]=(str[0]=='B'); } int main() { init(); work(); return 0; }
相关文章推荐
- 【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: [Usaco2007 Mar]Face The Right Way 自动转身机
- bzoj1704/poj3276[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 自动转身机【贪心+差分】
- [bzoj1704][Usaco2007 Mar]Face The Right Way 自动转身机_贪心
- bzoj1704/poj3276[Usaco2007 Mar]Face The Right Way自动转身机
- POJ - 3276/USACO - Mar07 Gold Face The Right Way 尺取法+反转
- POJ3276 Face The Right Way
- POJ 3276 Face The Right Way【枚举】
- POJ 3276-Face The Right Way(牛面向前方-开关问题)
- bzoj1703[Usaco2007 Mar]Ranking the Cows 奶牛排名
- 【POJ】3276 - Face The Right Way 反转
- POJ - 3276 Face The Right Way(开关问题)
- P2882 Face The Right Way - USACO07MAR
- POJ3276 Face The Right Way——数学优化——pku3276