poj3276 Face The Right Way 反转问题
2016-12-23 23:13
423 查看
《挑战》p3276
N头牛排成了一排。每头牛或者向前或者向后。为了让所有的牛都面向前方,农夫约翰买了一台自动转向的机器。这个机器在购买时就必须设定一个数值K,机器每操作一次恰好使K头连续的牛转向。请求出为了让所有的牛都能面向前方需要的最少的操作次数M和对应的最小的K。1<=N<=5000
经典的开关问题,至少优化为O(n^2)复杂度,1到n范围内枚举K(O(n)),再利用尺取法从前到后判断是否转向
直接贴上原代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int dir[5005],f[5005],n;
int solve(int k){
memset(f,0,sizeof(f));
int res=0,sum=0;
for(int i=0;i+k<=n;i++){
if((dir[i]+sum)%2!=0){
res++;
f[i]=1;
}
sum+=f[i];
if(i-k+1>=0)
sum-=f[i-k+1];
}
for(int i=n-k+1;i<n;i++){
if((dir[i]+sum)%2!=0)
return -1;
if(i-k+1>=0)
sum-=f[i-k+1];
}
return res;
}
int main(){
char c;
cin>>n;
for(int i=0;i<n;i++){
cin>>c;
if(c=='B')
dir[i]=1;
else
dir[i]=0;
}
int K=1,M=n;
for(int k=1;k<=n;k++){
int m=solve(k);
if(m>=0&&M>m){
M=m;
K=k;
}
}
cout<<K<<" "<<M<<endl;
}
N头牛排成了一排。每头牛或者向前或者向后。为了让所有的牛都面向前方,农夫约翰买了一台自动转向的机器。这个机器在购买时就必须设定一个数值K,机器每操作一次恰好使K头连续的牛转向。请求出为了让所有的牛都能面向前方需要的最少的操作次数M和对应的最小的K。1<=N<=5000
经典的开关问题,至少优化为O(n^2)复杂度,1到n范围内枚举K(O(n)),再利用尺取法从前到后判断是否转向
直接贴上原代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int dir[5005],f[5005],n;
int solve(int k){
memset(f,0,sizeof(f));
int res=0,sum=0;
for(int i=0;i+k<=n;i++){
if((dir[i]+sum)%2!=0){
res++;
f[i]=1;
}
sum+=f[i];
if(i-k+1>=0)
sum-=f[i-k+1];
}
for(int i=n-k+1;i<n;i++){
if((dir[i]+sum)%2!=0)
return -1;
if(i-k+1>=0)
sum-=f[i-k+1];
}
return res;
}
int main(){
char c;
cin>>n;
for(int i=0;i<n;i++){
cin>>c;
if(c=='B')
dir[i]=1;
else
dir[i]=0;
}
int K=1,M=n;
for(int k=1;k<=n;k++){
int m=solve(k);
if(m>=0&&M>m){
M=m;
K=k;
}
}
cout<<K<<" "<<M<<endl;
}
相关文章推荐
- 【反转问题】POJ - 3276 Face The Right Way
- poj 3276 Face The Right Way 反转(开关问题)
- POJ3276—Face The Right Way 【常用技巧—反转(开关问题)】
- POJ 3276 Face The Right Way(一维反转问题)
- POJ 3276 Face The Right Way 反转问题 常用技巧
- POJ_3276_Face The Right Way_区间反转问题
- poj3276 Face The Right Way 反转问题
- 【POJ 3276 Face The Right Way】+ 尺取法 + 开关问题
- POJ 3276:Face The Right Way (开关问题)
- POJ 3276 Face The Right Way 反转
- POJ 3276 Face The Right Way(反转)
- Face The Right Way poj 3276 开关问题
- 【POJ】POJ 3276 Face The Right Way (开关问题)
- POJ 3276 Face The Right Way [反转 (贪心)] 《挑战程序设计竞赛》 3.2
- pOJ 3276 Face The Right Way【思维 反转开关】
- poj 3276 Face The Right Way【开关问题】
- POJ - 3276 Face The Right Way(开关问题)
- POJ 3276 Face The Right Way (反转)
- Face The Right Way POJ - 3276 简单开关问题
- POJ 3276 Face The Right Way(开关问题)