題目背景
難度係數:☆☆☆☆☆(如果你看懂了)
題目描述
從前有很多個硬幣擺在一行,有正面朝上的,也有背面朝上的。正面朝上的用1表示,背面朝上的用0表示。現在要求從這行的第一個硬幣開始,將n個硬幣(1<=n<=硬幣個數)一起翻面,問如果要將所有硬幣翻到正面朝上,最少要進行這樣的操作多少次?
輸入輸出格式
輸入格式:
一個字符串(當然不限長度,在字符串範圍之內),有0和1組成
輸出格式:
要翻轉的最少次數
輸入輸出樣例
輸入樣例#1:
10
輸出樣例#1:
2
說明
樣例1說明:
第1次翻轉:把第一個硬幣翻到反面,字符串爲00
第2次翻轉:把第一、二個硬幣一起翻到正面,字符串爲11,翻轉完成,輸出2
思路
除了開頭是0只加上1,其他的就是0的塊塊數量*2。。。
好貪心啊表示這不是BFS題嗎哈哈哈。。。
被我給水過了哈哈。。。
代碼
很清真
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1e6+5;
char s[N];
int n,num[N],pos,tot=0;
int main()
{
scanf("%s",s+1);
n=strlen(s+1);
for (int i=1;i<=n;i++)
num[i]=s[i]-'0';
int flag=0,now=0;
if (num[n]==0) tot++;
if (num[1]==0) now=1;
for (int i=1;i<=n;i++)
{
if (num[i]==0) flag=1;
if (flag==1&&num[i]==1) {flag=0;tot++;}
}
printf("%d\n",tot*2-now);
return 0;
}
//10001001