zoukankan      html  css  js  c++  java
  • UVA-12545 Bits Equalizer (贪心)

    题目大意:两个等长的字符串p和q,p有‘0’,‘1’,‘?’组成,q由‘0’,‘1’组成。有三种操作:1.将‘?’变成0;2.将‘?’变成‘1’;3.交换同一字符串任意两个位置上的字符。问有p变到q最少需要几次操作。

    题目分析:贪心。贪心策略:若两个位置上的字符相同,则不用处理;能交换位置便交换位置,这样能一次改变两个字符,优先交换‘0’,如果没‘0’再交换‘?’。

    代码如下:

    # include<iostream>
    # include<cstdio>
    # include<string>
    # include<cstring>
    # include<algorithm>
    using namespace std;
    
    string p,q;
    
    int main()
    {
        int T,cas=0;
        scanf("%d",&T);
        while(T--)
        {
            cin>>p>>q;
    
            int step=0,l=p.size();
            for(int i=0;i<l;++i){
                if(p[i]==q[i])
                    continue;
                if(p[i]!='1')
                    continue;
                int flag=1;
                for(int j=0;j<l;++j){
                    if(p[j]==q[j]||i==j)
                        continue;
                    if(q[j]=='1'&&p[j]=='0'){
                        swap(p[i],p[j]);
                        ++step;
                        flag=0;
                        break;
                    }
                }
                if(flag){
                    for(int j=0;j<l;++j){
                        if(p[j]==q[j]||i==j)
                            continue;
                        if(q[j]=='1'&&p[j]=='?'){
                            swap(p[i],p[j]);
                            ++step;
                            break;
                        }
                    }
                }
            }
            for(int i=0;i<l;++i){
                if(p[i]==q[i]||p[i]=='1')
                    continue;
                p[i]=q[i];
                ++step;
            }
    
            printf("Case %d: ",++cas);
            if(p==q)
                printf("%d
    ",step);
            else
                printf("-1
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    border-radius:50%和100%究竟有什么区别
    GoLang几种读文件方式的比较
    Golang Import使用入门
    golang: 常用数据类型底层结构分析
    Python--字典操作
    Python--字符串操作
    Python split 分割中文
    LR(逻辑回归)
    Python--列表操作
    Eclipse 使用Anaconda python 解释器
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/4870841.html
Copyright © 2011-2022 走看看