洛谷 2708 硬幣翻轉 特判? 解題報告

題目背景

難度係數:☆☆☆☆☆(如果你看懂了)

題目描述

從前有很多個硬幣擺在一行,有正面朝上的,也有背面朝上的。正面朝上的用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章