题目要求简述:给定长度分别为n1,n2(n1,n2<=100)且每列的高度只为1或者2的长条。需要将他们放入一个高度为3的容器,问能够容纳它们的最短容器长度。

分析:

  1. 对于这样的题目显而易见有两种思路,第一,固定一个字符串,另一个从左到右进行移动。第二,固定一个字符串a,字符串b移动,再固定b,让a移动,取二者长度最小值。
  2. 两种方法我都经过自己的实现,觉得还是第二种代码更简洁优雅,同时还具有一定的可扩展性。

用例子说明一下吧~

数组1和数组2是我们待比较的两个数组,(当然,都是字符串数组),我们先固定其中的任意一个,放在下方,在让另一个在上方不断向左平移,进行比较,即可

当初次比较时,有如下图例

  此时,从数组1的头元素开始和数组2的头元素进行比较,当出现两个2,或者匹配部分比较完成时,此次比较完成,用一个状态变量标记此次比较的结果。

由图例知,此次比较会停止在下标为1的元素上。

  然后上面的数组下标右移,相当于数组左移,进行第二次比较。

由图例知,此次比较是成功的,用两个数组的总长度n1+n2减去匹配部分的长度,即得到此次所需的长度len,如果len小于原先记录的最小长度,则更新最小长度。

不断重复上述过程,直到这种情况为止:

这样我们就完成一半的比较任务,接下来,就是将数组1和数组2的位置颠倒,重复上述过程,取两次所得最小值,即可得到最终结果

颠倒并重复上述过程:

明白了思路,接下来让我们给出一个简洁的代码实现:

 #include<cstdio>
#include<cstring>
const int maxn=;
char a[maxn+],b[maxn+];
int n1,n2;
int min(const int &i,const int &j){
return i<j?i:j;
}
int minLen(char *s1,char *s2,int &n){// n为s1的长度
int sumLen=n1+n2,minn=min(n1,n2),len=sumLen;
for(int i=;i<n;i++){
int ok=,fix=min(n-i,minn);//fix的计算是一个难点
for(int j=;j<fix;j++)if(s1[i+j]==''&&s2[j]==''){
ok=;break;
}
if(ok&&len>sumLen-fix)len=sumLen-fix;
}
return len;
}
int main(){
while(scanf("%s%s",&a,&b)==){
n1=strlen(a),n2=strlen(b);//无意中用到了逗号运算符
printf("%d\n",min(minLen(a,b,n1),minLen(b,a,n2)));//用min函数取两次结果的最小值
}
}

好啦,今天就到这里,贴一下战果以及传送门,大家加油哦~~~,拜拜\(•ω•`)o

题目传送门:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4463

第三章 数组与字符串 UVa1588 Kickdown的更多相关文章

  1. JQuery攻略(三)数组与字符串

    在上两章,JQuery攻略(一) 基础知识——选择器 与 DOM 和 JQuery攻略(二) Jquery手册 我们为后面的章节打好了基础,在这一章节中,我们继续. 在这一章节中,我们记录的是JQue ...

  2. C语言 第七章 数组与字符串

    一.数组 1.1.数组的概念 用来存储一组相同类型数据的数据结构.有点像班上放手机的手机袋,超市的储物柜. 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. ...

  3. C++学习笔记(三)--数组、字符串

    1.数组,C++中不允许数组的下标值为变量,只能是常量或者常量表达式,必须先定义后使用.数组赋初值几种常见方式: int a[] = {1,2,3,4,5}: int a[4] = {2,1,3,4} ...

  4. 快学Scala-第三章 数组相关操作

    知识点: 1.定长数组 Array val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0 val a = new Array[String](10) / ...

  5. PHP:第三章——数组中的array_values

    例: <?php header("Content-Type:text/html;charset=utf-8"); //array_value(); //功能:返回数组中所有的 ...

  6. 快学Scala习题解答—第三章 数组相关操作

    3 数组相关操作  3.1 编写一段代码.将a设置为一个n个随机整数的数组,要求随机数介于0(包括)和n(不包括)之间  random和yield的使用 import scala.math.rando ...

  7. 《Python基础教程》第三章:使用字符串

    find方法可以在一个较长的字符串中查找子字符串.它返回子串所在位置的最左端索引.如果没有找到则返回-1 join方法用来在队列中添加元素,需要添加的队列元素都必须是字符串 >>> ...

  8. 《快学Scala》第三章 数组相关操作

  9. java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;

    <java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...

随机推荐

  1. js 中混乱this

    1.在HTML元素事件属性中inline方式使用this关键字:  <div onclick=" // 可以在里面使用this ">division element&l ...

  2. char*或string转换成LPCWSTR

    VS2010默认是Unicode的,在VC 6.0中编译成功的项目在VS2010中常会出现类型错误. 经常出现的错误是:不能从const char *转换为LPCWSTR 如使用CreateDC(&q ...

  3. hdu 2087

    ps:感觉就是字符串处理...好像没什么好讲的...直接上代码 代码: #include "stdio.h" #include "string.h" ]; ]; ...

  4. cassandra中对节点失败与否的探测方法, the Phi accrual Failure Dector,附论文

    (1)在分布式系统中,对于某个节点是否还“活着”的探测,通常是设定一个时间的阀值,然后根据接收到的“心跳”信息的间隔,来判定这个节点是否还活着,然后返回一个bool值: 但这种做法很容易造成误判:因为 ...

  5. HDU 5234 DP背包

    题意:给一个n*m的矩阵,每个点是一个蛋糕的的重量,然后小明只能向右,向下走,求在不超过K千克的情况下,小明最终能吃得最大重量的蛋糕. 思路:类似背包DP: 状态转移方程:dp[i][j][k]--- ...

  6. 多线程 or 多进程?[转]

    在Unix上编程采用多线程还是多进程的争执由来已久,这种争执最常见到在C/S通讯中服务端并发技术的选型上,比如WEB服务器技术中,Apache是 采用多进程的(perfork模式,每客户连接对应一个进 ...

  7. The differences between Java application and Java applet

    在Java语言中,能够独立运行的程序称为Java应用程序(Application).Java语言还有另外一种程序--Applet程序.Applet程序(也称Java小程序)是运行于各种网页文件中,用于 ...

  8. 转 未能加载类型 xxxx

    未能加载类型 分析器错误   说明:   在分析向此请求提供服务所需资源时出错.请检查下列特定分析错误详细信息并适当地修改源文件. 分析器错误信息:   未能加载类型“xxxxx”. 错误的 < ...

  9. H5版俄罗斯方块(4)---火拼对战的雏形

    前言: 勿忘初心, 本系列的目标是实现一款类似QQ"火拼系列"的人机对战版俄罗斯方块. 在完成了基本游戏框架和AI的算法探索后, 让我们来尝试一下人机大战雏形编写. 本系列的文章链 ...

  10. oracle数据库--启动和关闭

    oracle--启动 oracle数据库的启动过程包含3个步骤:启动实例->加载数据库->打开数据库 分步骤启动过程可以对数据库进行不同的维护操作,对应我们不同的需求. 启动模式: 1.s ...