算法习题---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 ...
随机推荐
- Luogu P2330 繁忙的都市
Luogu P2330 繁忙的都市 裸的最小生成树. 当然,一定要注意它让你输出什么. #include<bits/stdc++.h> #define N 100010 using nam ...
- MyBatis_[tp_48]_动态sql_内置参数_parameter&_databaseId
笔记要点-----内置参数_parameter&_databaseId 用处: 迅速切换数据库,执行一条多分支的sql语句即可;1.定义接口 public interface Emp ...
- postgresql —— 查看索引
查索引 语句: SELECT tablename, indexname, indexdef FROM pg_indexes WHERE tablename = 'user_tbl' ORDER BY ...
- CQOI2005 三角形面积并 和 POJ1177 Picture
1845: [Cqoi2005] 三角形面积并 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 1664 Solved: 443[Submit][Stat ...
- Solr添加paoding分词器
1.Solr3.6.2 并可运行 paoding-analysis3.0.jar 下载 2.1 解压{$Solr-Path}/example/webapp 下的solr.war文件,解压到当前文件夹 ...
- 2018 南京网络预赛Sum - 离线分段打表
题意 设 $f(n)$ 为 $n=ab$ 的方案数,其中 $a,b$ 为无平方因子数. 例如,$f(6)=4$,因为 $6 = 1 \times 6 = 2 \times 3 = 3 \times 2 ...
- Codeforces Round #597 (Div. 2) D. Shichikuji and Power Grid
链接: https://codeforces.com/contest/1245/problem/D 题意: Shichikuji is the new resident deity of the So ...
- PHP 创建 MySQL 表
CREATE TABLE 语句用于创建 MySQL 表. 创建表前,我们需要使用 use myDB 来选择要操作的数据库: use myDB; 我们将创建一个名为 "MyGuests&quo ...
- linux 中将用户添加到组的 4 个方法
Linux 组是用于管理 Linux 中用户帐户的组织单位.对于 Linux 系统中的每一个用户和组,它都有惟一的数字标识号.它被称为 用户 ID(UID)和组 ID(GID).组的主要目的是为组的成 ...
- 066_调整虚拟机内存参数的 shell 脚本
#!/bin/bash#脚本通过调用 virsh 命令实现对虚拟机的管理,如果没有该命令,需要安装 libvirt-client 软件包 cat << EOF1.调整虚拟机最大内存数值2. ...