翻紙牌遊戲
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3540 Accepted Submission(s): 1324
#include<stdio.h>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string sh;
int len,answer_1,answer_2;
int dfs(string s,int sum);
int main()
{
while(cin>>sh)
{
len = sh.length();
answer_1 = dfs(sh,0);
sh[0]=(sh[0]=='0')?'1':'0';
sh[1]=(sh[1]=='0')?'1':'0';
answer_2 = dfs(sh,1);
if(answer_1+answer_2==-2) printf("NO\n");
else if(answer_1!=-1 && answer_2!=-1) printf("%d\n",min(answer_1,answer_2));
else printf("%d\n",answer_1==-1?answer_2:answer_1);
}
return 0;
}
int dfs(string s,int sum)
{
for(int i=1 ; i<len ; i++)
{
if(s[i-1]=='0')continue;
sum++;
s[i] = (s[i]=='0')?'1':'0';
s[i-1] = (s[i-1]=='0')?'1':'0';
if(i+1<len)
s[i+1] = (s[i+1]=='0')?'1':'0';
}
if(s[len-1]=='1') return -1;
return sum;
}
題目傳送門............