前言

题目

大意是说,两个槽能够插在一起,并保证每一列的高度不高于3,保证最短长度。

思路

思路很简单,取短字符串遍历长字符串的每一个位置,纪录下位置,并取最短即可。

实现


//习题3-11 换抵挡装置
void caculate17() {char n1[1000], n2[1000];while (scanf("%s\n%s", n1, n2) != EOF) {char *min_arr, *max_arr;if (strlen(n1) < strlen(n2)) {min_arr = n1;max_arr = n2;}else {min_arr = n2;max_arr = n1;}int minLen = (int)strlen(min_arr);int maxLen = (int)strlen(max_arr);int min = minLen + maxLen;// 从最长数字的左边开始对齐for (int j = 0; j < maxLen; j++) {int j_temp = j;int result = 1;for (int i = minLen-1; i >= 0 && j_temp >= 0; i--) {int sum = (min_arr[i] - '0') + (max_arr[j_temp] - '0');if (sum > 3) {result = 0;break;}j_temp--;}if (result) {int temp = 0;if (j >= strlen(min_arr)-1) {temp = maxLen;}else {temp = minLen + maxLen - (j + 1);}if (temp < min) {min = temp;}}}if (strlen(min_arr) != strlen(max_arr)) {// 从最大数字的右边开始对齐for (int j = maxLen - minLen; j < maxLen; j++) {int j_temp = j;int result = 1;for (int i = 0; i < minLen && j_temp < maxLen; i++) {int sum = (min_arr[i] - '0') + (max_arr[j_temp] - '0');if (sum > 3) {result = 0;break;}j_temp++;}if (result) {int temp = 0;if (j == maxLen - minLen) {temp = maxLen;}else {temp = minLen + maxLen - (maxLen - j);}if (temp < min) {min = temp;}}}}printf("%d\n", min);}
}// 题目同上
void caculate18() {char n1[1000], n2[1000];while (scanf("%s\n%s", n1, n2) != EOF) {char *min_arr, *max_arr;if (strlen(n1) < strlen(n2)) {min_arr = n1;max_arr = n2;} else {min_arr = n2;max_arr = n1;}int maxLen = (int)strlen(max_arr);int minLen = (int)strlen(min_arr);int min = maxLen + minLen;int result = 0;for (int i = -minLen; i < maxLen + minLen; i++) {int ok = 1;// 判断for (int j = 0; j < minLen; j++) {// 重合部分if (i+j >= 0 && i+j < maxLen) {if ((max_arr[i + j] - '0') + (min_arr[j] - '0') > 3) {ok = 0;break;}}}// 短字符串在左边,部分重合if (ok && i < 0) {int temp = -i + maxLen; //-i代表左边的距离,移动距离则是重合部分if (temp < min) {min = temp;}}//短字符串在右边,部分重合if (ok && i > maxLen - minLen) {int temp = i + minLen; //这里的i则代表移动距离,没有包括重叠的部分if (temp < min) {min = temp;}}// 完全重合(最优解)if (ok && i >= 0 && i + minLen <= maxLen) {result = 1;break;}}if (result) {printf("%d\n", maxLen);}else {printf("%d\n", min);}}
}// 大神思路,简单高效
void caculate19() {char s1[128], s2[128];while (scanf("%s\n%s", s1, s2) == 2) {int max_len = strlen(s1), min_len = strlen(s2);int ret = min_len + max_len;// 从左到右for (int i = -min_len; i < max_len; i++) {int ok = 1;for (int j = 0; j < min_len && ok; j++) {if (i + j >= 0 && i + j < max_len) {ok &= s1[i+j] - '0'  + s2[j] - '0' <= 3;}}if (ok) {// 如果短字符串在左边或者重合的话,则为-i + max_len// 如果短字符串在右边的话,则为i + min_lenret = min(ret, max(max_len, i + min_len) - min(i, 0)); //太棒了!}}printf("%d\n", ret);}
}int main() {caculate18();return 0;
}

呃,我的实现是第一种,没ac,应该是只过了部分的测试用例,但我不知道怎么改了~

转载于:https://www.cnblogs.com/George1994/p/6542380.html

UVa 1588 换抵挡装置相关推荐

  1. UVA - 1588 ​​​​​​​Kickdown

    Kickdown UVA - 1588 题目传送门 解决方法:上板不动,下板向左移:上板不动,下板向右移. AC代码: #include <cstdio> #include <ios ...

  2. UVa 1588 - Kickdown(BUG)

    //UVa 1588 - Kickdown //一次循环,分类讨论 //有BUG,,,不要看了,,仅供收藏...欢迎大神提出意见... #include<stdio.h> int main ...

  3. 习题3-11 Kickdown UVA - 1588

    不知道是我把题意理解错了还是题目出错了,我觉得,在题目的要求之下,如果能够反转其中一块板,那么会得到更短的长度.但是测试数据表明不需要反转板. 刚开始写怎么写都写不对,因为对相交部分的考虑不够细致,处 ...

  4. UVa1588 | 算法竞赛入门经典(第二版) 习题3-11 换低档装置

    样例输入 2112112112 2212112 12121212 21212121 2211221122 21212 样例输出 10 8 15 解题思路: 最开始设想了四种情况, A固定, B左移或右 ...

  5. 算法竞赛入门经典(第二版)第三章习题

    声明:作者水平有限,只是会基础C语言的小菜,C++还未入门.作者仅根据算法竞赛入门经典(第二版)书上第三章习题所述题意而编写,并未严格按照原题的输入输出编写,代码仅经过个人测试(OJ网站太慢了).代码 ...

  6. 简述使用混合传递参数时的基本原则_工程机械考试题库

    练习一 一.填空 1.装载机按使用场所不同可以分为露天用装载机和井下用装载机. 2.同一铲斗有两种容积标志,一是平装斗容,二是堆装斗容. 3.半轴的理想支承方式是全浮式支承,这种支承方式可使半轴只承受 ...

  7. 驾照考试(科目三-大路)

    车辆起步步骤: 1.走到车头前左右观察道路行驶状况 2.关车门,座椅调整好,系安全带,踩离合,挂一档,等考官指令:开始考试 3.开左转向灯.鸣号.观察左后视镜.放手刹 4.右脚移到油门上,边抬离合器边 ...

  8. [渝粤教育] 三峡大学 电力电子技术(Ⅱ) 参考 资料

    教育 -电力电子技术(Ⅱ)-章节资料考试资料-三峡大学[] 第一章 单元测试 1.[单选题]整流是以下哪两种电能形式之间的转换? A.AC-AC B.AC-DC C.DC-AC D.DC-DC 参考资 ...

  9. 简单通俗易懂 汽车入门知识图解大集合

    很多车主都想了解更多的汽车知识,以加深对爱车的了解,只是无奈汽车结构之复杂,机械知识之乏味,都一一放弃了.现在这些都不是问题!下面给大家准备了一系列的图解汽车文章,结合高清大图剖析汽车内部结构,让复杂 ...

最新文章

  1. linux内核单独安装,Linux内核编译与安装
  2. CTFshow 文件上传 web154
  3. 机器学习模型可解释性的6种Python工具包,总有一款适合你!
  4. Java程序员应知道的十条Java优化策略,让你的系统健步如飞
  5. 学会这个绝招,让 C++ 崩溃无处可逃!
  6. MySQL主从复制-基于GTID及多线程的复制
  7. 试分析家用变频空调的计算机控制原理,习 题 五
  8. mysql alter操作
  9. Linux下合成pdf
  10. OceanBase数据库实践入门——手动搭建OceanBase集群
  11. 依据前端传递的数字等生成二维码图片
  12. 数据增强-亮度-对比度-色彩饱和度-色调-锐度 不改变图像大小 --增加ssd目标框xml文件的同步处理方法。
  13. 定义一个函数用来判断奇偶数PHP,定义函数 判断整数的奇偶性,如果是偶数则返回1,否则返回0,函数...,C语言:编写一个程序,判断一个整数的奇偶性。如果是奇数,输....
  14. [ML-03] Matplotlib-3
  15. oracle批量修改多张表的数据,Oracle批量修改用户表table的表空间
  16. 最简解决方案--安装ubuntu 遇到32位 EFI(UEFI) /EFI/BOOT/bootia32.efi unavilable
  17. p标签内不能包含块级元素
  18. 前端预览 PDF 文件几种方式汇总(使用PDFJS)
  19. 上海58同城区域小区请清单(数据)
  20. “美亚杯”第三届中国电子数据取证大赛答案解析(个人赛)

热门文章

  1. tkinter # If this fails your Python may not be configured for Tk解决方法
  2. 开启协程_软件特攻队|GCC10发布,GCC 11将支持C++20协程功能?
  3. centos so查看_等保测评主机安全:CentOS密码修改周期与登录失败处理
  4. 调用者保存寄存器和非调用者保存寄存器
  5. Pytorch —— 学习率调整策略
  6. 无人驾驶汽车系统入门系列
  7. 安装FFmpeg后,发现没有生成ffplay的解决办法
  8. 122 - Trees on the level(模拟内存池解法)
  9. 北京理工大学计算机学院赵曜,北理工学子参加第十届蓝桥杯全国软件和专业人才大赛取得佳绩...
  10. excel删除无尽空白行_【辅导员说】学好办公软件word、excel、ppt的意义