zoukankan      html  css  js  c++  java
  • uva12545 Bits Equalizer

    首先根据题意,既然0能变1,问号能变任何。那么不能变成T串的情况只能是S串中的1大于T串中1的个数。

    然后考虑能够成为T串的情况。首先,不相同的0和不相同的1首先进行置换,因为这样置换只需进行一次操作,比其它任何情况都优。
    交换次数为diff0 diff1中小的那个次,之后借由?再有2*(diff0 - diff1)次操作(先变再换),剩下的?变成对应的
    不管是全剩1还是全剩0最终都是要进行每个两次操作。 最后的que-(diff0 - diff1)代表剩余的问号要进行的操作

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    const int MAXN = 105;
    char s[MAXN], t[MAXN];
    
    int main()
    {
        int T;
        (scanf("%d", &T);
        int kase = 1;
        while(T--)
        {
    
            scanf("%s%s", s, t);
            int s1 = 0, t1 = 0, len = strlen(s), d0 = 0, d1 = 0, que = 0;
            for(int i = 0; i < len; ++i)
            {
                if(s[i] == '1') ++s1;
                if(t[i] == '1') ++t1;
                if(s[i] == '?') ++que;
                if(s[i] != t[i] && s[i] == '0') ++d0;
                if(s[i] != t[i] && s[i] == '1') ++d1;
            }
            printf("Case %d: ", kase++);
            if(s1 > t1)
                printf("-1
    ");
                //交换次数为diff0 diff1中小的那个次,之后借由?再有2*(diff0 - diff1)次操作(先变再换),剩下的?变成对应的
            else //不管是全剩1还是全剩0最终都是要进行每个两次操作。 最后的que-(diff0 - diff1)代表剩余的问号要进行的操作
            {
               int ans=min(d0,d1)+abs(d0-d1)*2+que-abs(d0-d1);
                printf("%d
    ", ans);
            }
        }
        return 0;
    }
  • 相关阅读:
    sublime Text2 快捷键精华版
    jQuery中的选择器(下)
    jQuery中的选择器(上)
    C#编程语言与面向对象——类与对象
    C#编程语言与面向对象——核心
    拖延症改变
    IIS 发布网站 ashx无法访问
    C# button 去边框
    JS URL参数传递 谷歌乱码解决
    地址(Address)——统一资源表示(URI)——WCF学习笔记(2)
  • 原文地址:https://www.cnblogs.com/lqerio/p/9745560.html
Copyright © 2011-2022 走看看