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;
    }
  • 相关阅读:
    Http协议的断点续传下载器,使用观察者模式监视下载进度,使用xml保存下载进度。
    C++ 复制到粘贴板
    编译防火墙——C++的Pimpl惯用法解析
    字符串输出
    windows路径操作API函数
    Boost解析xml——xml写入
    智能指针shared_ptr
    Boost 解析xml——插入Item
    ListCtrl添加右键菜单(在对话框类中)
    抓包工具Charles的使用说明
  • 原文地址:https://www.cnblogs.com/lqerio/p/9745560.html
Copyright © 2011-2022 走看看