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 <cstring>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    string a;
    string b;
    int main()
    {
    int T;
    int cas=0;
    scanf("%d",&T);
    while(T--)
    {
    cas++;
    int i,j;
    cin>>a>>b;
    int cnt0,cnt1,cnt2;
    int cnt11=0,cnt21=0;
    cnt0=cnt1=cnt2=0;
    for(i=0;i<a.size();i++)
    {
    if(a[i]=='?')
    cnt0++;
    if(a[i]=='1')
    cnt11++;
    if(b[i]=='1')
    cnt21++;
    if(b[i]!=a[i]&&a[i]!='?')
    {
    if(b[i]=='0')
    cnt2++;
    if(b[i]=='1')
    cnt1++;
    }
    }
    //cout<<cnt11<<" "<<cnt21<<endl;
    //8cout<<cnt1<<" "<<cnt2<<" "<<cnt0<<endl;
    if(cnt11>cnt21)
    {
    printf("Case %d: -1 ",cas);
    continue;
    }
    int ans=0;
    if(cnt1==cnt2)
    {
    ans+=cnt1;
    ans+=cnt0;
    }
    if(cnt2>cnt1)
    {
    ans+=cnt1;
    ans+=(cnt2-cnt1);
    ans+=cnt0;
    }
    if(cnt2<cnt1)
    {
    ans+=cnt2;
    ans+=(cnt1-cnt2);
    ans+=cnt0;
    }
    printf("Case %d: %d ",cas,ans);
    }
    return 0;
    }
  • 相关阅读:
    Ubuntu解压缩命令
    小语种优化策略
    外贸seo常用Zen Cart数据库mysql批量执行命令
    ASP Request.ServerVariables
    centos linux 下 crontab e 命令插入及保存
    AJAX 传值给后台
    partial class
    Jquery 实现弹出层
    abstract class
    SQL锁表
  • 原文地址:https://www.cnblogs.com/137033036-wjl/p/4928562.html
Copyright © 2011-2022 走看看