博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 12545 比特变换器
阅读量:5259 次
发布时间:2019-06-14

本文共 1503 字,大约阅读时间需要 5 分钟。

 

题意:输入两个等长的串S和T,其中S包含字符0,1,?,但T只包含0和1。

        用尽量少的步数把S变成T。每步有3种操作:

        ①把S中的0变成1;②把S中的“?”变成0或者1;交换S中任意两个字符。

思路:题目不是很难。首先考虑交换,然后再看有多少不同的,就需要再加上多少次。

1 #include
2 #include
3 #include
4 using namespace std; 5 6 string s1, s2; 7 int cnt; 8 9 10 void solve()11 {12 int l = s1.size();13 cnt = 0;14 int num1 = 0, num2 = 0;15 for (int i = 0; i < l; i++)16 {17 if (s1[i] == '1') num1++;18 if (s2[i] == '1') num2++;19 }20 if (num1>num2)21 {22 cnt = -1;23 return;24 }25 26 27 for (int i = 0; i < l; i++)28 {29 if (s1[i] != s2[i] && s1[i] != '?')30 {31 for (int j = i + 1; j < l; j++)32 {33 if (s1[j] == s2[i] && s2[j] == s1[i])34 {35 cnt++;36 char temp;37 temp = s1[i];38 s1[i] = s1[j];39 s1[j] = temp;40 break;41 }42 }43 }44 }45 for (int i = 0; i < l; i++)46 {47 if (s1[i] != s2[i]) cnt++;48 }49 50 }51 52 int main()53 {54 //freopen("D:\\txt.txt", "r", stdin);55 int t, kase = 0;56 cin >> t;57 while (t--)58 {59 cin >> s1 >> s2;60 solve();61 cout << "Case " << ++kase << ": " << cnt << endl;62 }63 64 return 0; 65 }

 

转载于:https://www.cnblogs.com/zyb993963526/p/6354252.html

你可能感兴趣的文章
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
Java项目xml相关配置
查看>>
三维变换概述
查看>>
vue route 跳转
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。...
查看>>
Linux中防火墙centos
查看>>
mysql新建用户,用户授权,删除用户,修改密码
查看>>
FancyCoverFlow
查看>>