您的位置:首页 > 其它

【POJ】3185 - The Water Bowls 反转

2017-08-29 15:40 429 查看
http://poj.org/problem?id=3185

n个数,每次改变(0->1,1->0)三个数(自身和左右两侧),问最少多少步可以变为全为0.

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

int a[21]={0};  //数字
int f[21]={0};  //是否转
int ans=100;
int tmp;

int main(){
for (int i=1;i<=20;i++){
cin >> a[i];
}

f[1]=tmp=1;  //假设翻第一个
for (int i=2;i<=20;i++){
if (f[i]=(f[i-2]^f[i-1]^a[i-1])) tmp++;
}
if (tmp<ans&&(f[19]^f[20]^a[20])==0) ans=tmp;

f[1]=tmp=0;  //假设不翻第一个
for (int i=2;i<=20;i++){
if (f[i]=(f[i-2]^f[i-1]^a[i-1])) tmp++;
}
if (tmp<ans&&(f[19]^f[20]^a[20]==0)) ans=tmp;

cout << ans << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: