您的位置:首页 > 其它

poj3276 反转 挑战程序设计竞赛

2018-02-10 13:50 302 查看
2018-2-8

翻转奇数次与翻转一次的效果是一样的,

翻转偶数次与不翻转的效果是一样的。

假设我们已知k的大小了,那么我们至少需要多少次操作呢?对于第一个奶牛来说,如果它的方向不正确,它只能由以第一个为首的连续的k个数的翻转来改变,这样我们可以依次往下看。。。

TLE的问题还未解决。。。

可以在翻转这上面进行处理,如果说某一个的翻转为奇数次,那么就等同于翻转一次,如果说翻转偶数次,那么就等同于不进行翻转。

#include<iostream>
#include<cstring>
using namespace std;

const int N = 5000;
bool x[N+2],y[N+2];
int n,k,m;

int turn(int p){
int cnt=0;
memcpy(y,x,sizeof(x));
for (int i=1;i<=n-p+1;i++){
if (y[i]){
for (int j=0;j<p;j++){
y[i+j]=!y[i+j];
}
cnt++;
if (cnt>=m) return N;
}
}
for (int i=n-p;i<=n;i++){
if (y[i]) return -1;
}
return cnt;
}

int main(){
while (cin>>n){
char t;
for (int i=1;i<=n;i++){
cin>>t;
if (t=='B') x[i]=1;
else x[i]=0;
}
k=N;m=N;
for (int i=1;i<=n;i++){
int now=turn(i);
if (now!=-1&&now<m){
k=i;m=now;
}
}
cout<<k<<" "<<m<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj 反转