算法习题---3.11换抵挡装置(UVa1588)
一:题目
给你连个长度分别为n1,n2且每列高度只为1或2的长条,然后将他们拼在一起,高度不能超过3,问他们拼在一起的最短长度
二:实现思路
1.获取主动轮和从动轮的数据。
2.主动轮不动,从动轮从左向右开始进行卡位,不断更新卡位成功(最大高度不超过3)时的最小长度
3.注意:当我们在某一时刻的长度若是小于等于主/从动轮的长度时,不向下判断
三:测试数据
输入数据
输出数据
四:模拟卡位
(一)主动轮+从动轮:最小长度两者之和17
(二)开始第一步:高度超过3,失败
(三)第二步:卡位成功,最小长度变为15
(四)第三步:卡位成功,最小长度14
(五)第四步:卡位失败(高度超过3),不进行更新
(六)第五步:卡位成功,最小长度12
(七)第六步:卡位失败
(八)第七步:卡位失败
(九)第九步:卡位成功,最小长度为10,等于主动轮长度,所以不进行下面的卡位,直接跳出
五:代码实现
void test36()
{
FILE* fi = freopen("data.in", "r", stdin);
FILE* fo = freopen("data.out", "w", stdout); int Mater[]; //主齿轮
int Drive[]; //从齿轮 int ch,Min_Len,Max_Len; int M_l, D_l;
int count = ; while (!feof(fi))
{
memset(Mater, , sizeof(Mater));
memset(Drive, , sizeof(Drive));
M_l = D_l = 0; //M_l是记录主动轮长度,D_l记录从动轮长度//开始读取主动轮数据
while ((ch = getchar()) != '\n' && ch != EOF)
{
Mater[M_l++]=ch-'';
} //开始读取从动轮数据
while ((ch = getchar()) != '\n' && ch != EOF) //EOF是-1 字符串结束是'\0'--0
{
Drive[D_l++] = ch - '';
} //不能根据长度卡位 //从动轮开始从尾部与主动轮头部卡位,依次得出最小距离
Min_Len = Max_Len = D_l + M_l; //初始是两个没有卡位好 D_l+M_l是初值,每当卡位一个就在基础上减一
//从动轮开始右移 //开始卡位主动轮 从第一个开始到最右边全部出去
int i, j, flag;
for (i = 0; i < Max_Len; i++)
{
//向左验证
flag = 1;
for (j = 0; j <= i; j++)
{
if (Drive[D_l - 1 - j] + Mater[i - j]>3) //从动轮的右边开始向左进行验证,若是从动轮高度加上主动轮高度>3-->卡位失败
{
flag = 0;
break; //卡位失败,不向后进行验证了
}
} if (flag) //卡位成功
{
if (j<=M_l) //从动轮在主动轮左侧
{
if (j >= D_l) //全部卡入,是最小
{
Min_Len = M_l;
break;
}
else //没有卡完,只有部分重合,还有一部分在外面未进入
if (Min_Len > Max_Len - j)
Min_Len = Max_Len - j;
}
else //从动轮在主动轮右侧
if (Min_Len > Max_Len - (D_l - i + M_l - 1))
Min_Len = Max_Len - (D_l - i + M_l - 1);
}
}
printf("%d\n", Min_Len);
} freopen("CON", "r", stdin);
freopen("CON", "w", stdout);
}
去掉括号,空格,注释,缩减声明(全部放入一行)...操作以后。代码行数会减少不少(但是没必要)
算法习题---3.11换抵挡装置(UVa1588)的更多相关文章
- UVa 1588 换抵挡装置
前言 题目 大意是说,两个槽能够插在一起,并保证每一列的高度不高于3,保证最短长度. 思路 思路很简单,取短字符串遍历长字符串的每一个位置,纪录下位置,并取最短即可. 实现 //习题3-11 换抵挡装 ...
- 换抵挡装置 (Kickdown,ACM/ICPC NEERC 2006,UVa1588
题目描述:算法竞赛入门经典习题3-11 题目思路:1.两长条移动匹配 2.上下调换,取小者 #include <stdio.h> #include <string.h> int ...
- 算法习题---5.11邮件传输代理的交互(Uva814)
一:题目 当某人从user1@mta1发送给另一个人user1@mta2时,这两个MTA将会通信. 如果两个收件人属于同一个MTA,发送者的MTA只需与这个MTA通信一次就可以把邮件发送给这两个人. ...
- 【算法习题】数组中任意2个(3个)数的和为sum的组合
题1.给定一个int数组,一个数sum,求数组中和为sum的任意2个数的组合 @Test public void test_find2() { int[] arr = { -1, 0, 2, 3, 4 ...
- 数据结构和算法(Golang实现)(11)常见数据结构-前言
常见数据结构及算法 数据结构主要用来组织数据,也作为数据的容器,载体. 各种各样的算法,都需要使用一定的数据结构来组织数据. 常见的典型数据结构有: 链表 栈和队列 树 图 上述可以延伸出各种各样的术 ...
- 排序算法(7)--exchang Sorting--交换排序[2]--Quick Sort--快速排序
1.基本思想 从待排序列中选取一元素作为轴值(也叫主元). 将序列中的剩余元素以该轴值为基准,分为左右两部分.左部分元素不大于轴值,右部分元素不小于轴值.轴值最终位于两部分的分割处. 对左右两部分重复 ...
- 算法导论——lec 11 动态规划及应用
和分治法一样,动态规划也是通过组合子问题的解而解决整个问题的.分治法是指将问题划分为一个一个独立的子问题,递归地求解各个子问题然后合并子问题的解而得到原问题的解.与此不同,动态规划适用于子问题不是相互 ...
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...
- python 核心编程第二版 课后习题 第11章
11-3 函数.在这个练习中,我们将实现 max()和 min()内建函数. (a) 写分别带两个元素返回一个较大和较小元素,简单的 max2()核 min2()函数.他们应该可以用任意的 pytho ...
随机推荐
- zookeeper学习(2)----zookeeper和kafka的关系
转载: Zookeeper 在 Kafka 中的作用 leader 选举 和 follower 信息同步 如上图所示,kafaka集群的 broker,和 Consumer 都需要连接 Zookeep ...
- webpack 配置react脚手架(六):api
1 访问网址 https://cnodejs.org/api 可以调取api 2.//该body-parser 可以将请求的body数据,转变成 json 格式数据://express-session ...
- pandas模块的基本用法
一.读取文件 import pandas as pd data = pd.read_csv("F:\\ml\\机器学习\\01\\score.csv") #一般读取的是csv文件, ...
- django2.0报错Cannot import name 'urlresolvers'
刚刚从django1.1迁移到django2.0中出现一个意外的报错: google 了下,在stack.overflow上解释是说django2.0 把原来的 django.core.urlreso ...
- 如何的keil试试调试中,看逻辑分析仪Logic viwer
在调试过程中,可以使用keil自带的逻辑分析仪查看变量的试试信息,减少串口输出,提高部分cpu的效率,可以添加以下信息: 1.gpio引脚 2.全局变量 全局静态变量.局部变量是不行的. 然后,添加变 ...
- python - scrapy 爬虫框架(创建, 持久化, 去重, 深度, cookie)
## scrapy 依赖 twisted - twisted 是一个基于事件循环的 异步非阻塞 框架/模块 ## 项目的创建 1. 创建 project scrapy startproject ...
- php数据类型之 NULL类型
空在英文里面表示是null,它是代表没有.空(null)不是false,不是0,也不是空格. [重点]知道null产生的三种情况,学习empty 和 isset两个函数的区别.大理石平台怎么样 主要有 ...
- jQuery的ajax()方法提交数组问题
http://blog.csdn.net/thc1987/article/details/7278269 解决办法是添加一个属性 traditional:true $.ajax({ type: ...
- NodeJS基础知识
console.log方法: console.log("This is a test string"); node app.js 使用重定向标准输出流: node app.js 1 ...
- 深入了解JVM虚拟机8:Java的编译期优化与运行期优化
java编译期优化 java语言的编译期其实是一段不确定的操作过程,因为它可以分为三类编译过程:1.前端编译:把.java文件转变为.class文件2.后端编译:把字节码转变为机器码3.静态提前编译: ...