zoukankan      html  css  js  c++  java
  • Coloring Colorfully

    问题 C: Coloring Colorfully

    时间限制: 1 Sec  内存限制: 128 MB
    [提交] [状态]

    题目描述

    N块瓦片从左到右排成一行。每个块的初始颜色由长度为N的字符串S表示。

    如果S的第i个字符为0,则左边的第i个平铺将被漆成黑色,如果该字符为1,则漆成白色。

    你想重新油漆一些瓷砖黑色或白色,使任何两个相邻的瓷砖有不同的颜色。

    至少需要重新粉刷多少瓷砖才能满足条件?



    Constraints
    1≤|S|≤105
    Si is 0 or 1.

    输入

    Input is given from Standard Input in the following format:
    S

    输出

    Print the minimum number of tiles that need to be repainted to satisfy the condition.

    样例输入 Copy

    000
    

    样例输出 Copy

    1
    

    提示

    The condition can be satisfied by repainting the middle tile white
    解析:1.从前向后枚举时:如果两个都是相同的,就变后面的,因为保证前面是可以的那么后面也是行的
    2.从后往前枚举一次,如果相同就变前面的
    3.两种情况取最小值
    AC代码:
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<map> 
    #include<bits/stdc++.h> 
    using namespace std;
    typedef long long ll; 
    inline int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    const int INF=0x3f3f3f3f;
    const int maxn=5e5;
    char a[maxn];
    char b[maxn];
    int sum[maxn];
    int len;
    void inint(){
        scanf("%s",a+1);
        len=strlen(a+1);
        for(int i=1;i<=len;i++){
            b[i]=a[i];
        }
    }
    int main(){
        inint(); 
        int ans1=0; 
        for(int i=2;i<=len;i++){
            if(a[i]=='1'&&a[i-1]=='1'){
                a[i]='0';
                ans1++; 
            }
            else if(a[i]=='0'&&a[i-1]=='0'){
                a[i]='1';
                ans1++;
            }
        }
        int ans2=0;
        for(int i=len-1;i>=1;i--){
            if(b[i]=='1'&&b[i+1]=='1'){
                b[i]='0';
                ans2++;
            }
            else if(b[i]=='0'&&b[i+1]=='0'){
                b[i]='1';
                ans2++;
            }
        }
        printf("%d",min(ans1,ans2));    
    }
     
  • 相关阅读:
    【秒懂Java】【01_初识Java】04_学习资料
    【秒懂Java】【01_初识Java】03_Java简介
    【秒懂Java】【01_初识Java】02_软件开发
    【秒懂Java】【01_初识Java】01_编程语言
    Apriori算法
    Java并发编程--ThreadLocal内存泄漏原因
    Java并发编程--锁
    Java并发编程--wait/notify/notifyAll 方法的使用
    Java并发编程--线程的生命周期
    Java虚拟机--垃圾收集器--G1收集器
  • 原文地址:https://www.cnblogs.com/lipu123/p/12324075.html
Copyright © 2011-2022 走看看