博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3158 Kickdown(我的水题之路——齿轮盒子,读题失败)
阅读量:4068 次
发布时间:2019-05-25

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

Kickdown
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 1271   Accepted: 587

Description

A research laboratory of a world-leading automobile company has received an order to create a special transmission mechanism, which allows for incredibly efficient kickdown — an operation of switching to lower gear. After several months of research engineers found that the most efficient solution requires special gears with teeth and cavities placed non-uniformly. They calculated the optimal flanks of the gears. Now they want to perform some experiments to prove their findings.

The first phase of the experiment is done with planar toothed sections, not round-shaped gears. A section of length n consists of n units. The unit is either a cavity of height h or a tooth of height 2h. Two sections are required for the experiment: one to emulate master gear (with teeth at the bottom) and one for the driven gear (with teeth at the top).

There is a long stripe of width 3h in the laboratory and its length is enough for cutting two engaged sections together. The sections are irregular but they may still be put together if shifted along each other.

The stripe is made of an expensive alloy, so the engineers want to use as little of it as possible. You need to find the minimal length of the stripe which is enough for cutting both sections simultaneously.

Input

There are two lines in the input file, each contains a string to describe a section. The first line describes master section (teeth at the bottom) and the second line describes driven section (teeth at the top). Each character in a string represents one section unit — 1 for a cavity and 2 for a tooth. The sections can not be flipped or rotated.

Each string is non-empty and its length does not exceed 100.

Output

Write a single integer number to the output file — the minimal length of the stripe required to cut off given sections.

Sample Input

sample input #121121121122212112sample input #21212121221212121sample input #3221122112221212

Sample Output

sample output #110sample output #28sample output #315

Source

完全体英文题,看题目看了我一个多小时,之后通过别人的AC代码分析才了解到了题意要干嘛- -,所以解题思路基本上就和别人的代码是一样的。
说说题意吧,我用另一种方式来说,情节可能和原题不同:
你可以理解为,生产了两种齿轮,2表示凸齿、1表示凹槽,凸齿处高度为2h,凹槽处高度为1h,现在有一个高度为3h的盒子,要去装这两个齿轮,问至少要多长才可以装得下,要求两个齿轮不可以横向翻转。
分析题意:
如果两个齿轮刚刚好严丝合缝的可以拼凑在一起,那么他们的总高度就是3h,如输入样例#2:
1212121221212121
则,这两个齿轮拼凑在一起,长度为8,高度为3h,只需要一个长度为8的盒子就可以了。 
如果两个齿轮只有部分可以拼凑在一起又怎么办呢,如以下这个样例:
2221121
2212222
如果不平移是不可能拼凑在一起的,所以我们进行一次平移:
2221121
      2212222
我们可以看到中间4个齿轮是可以拼在一起,这样这个时候的总长度为3 + 4 +3 = 10.
如果完全不可以拼凑,则如同输入样例#3:
2211221122
21212
所以两个齿轮只好并列放置:
2211221122               或者:       2211221122
                    21212               21212
长度为15.
到了现在题意应该很明白了吧!
解法:
因为n<=100,为弱数据,所以可以直接用暴力求解。我们分别选择其中一个字符串不动,另一个字符串从相对它的k位置开始匹配(k=0,1,2,...),如果找得到可以刚刚好卡进的凸齿和凹槽的情况,就输出当前总长度即可;如果没有就将两个字符串的位置颠倒,再进行一次这样的平移+匹配。
注意点:
1)在匹配过程中,匹配的数组不要越界,j < len1 && j < len2 + i.
代码(1AC):
#include 
#include
#include
#include
using namespace std;char str1[110];char str2[110];int getlens(char sect1[], char sect2[]){ int len1, len2; int i, j; int flag; len1 = strlen(sect1); len2 = strlen(sect2); for (i = 0; i < len1; i++){ flag = 1; for (j = i; j < len1 && j < i + len2; j++){ if (sect1[j] == '2' && sect2[j - i] == '2'){ flag = 0; } } if (flag){ return max(len1, i + len2); } } return len1 + len2;}int main(void){ int len; scanf("%s%s", str1, str2); len = min(getlens(str1, str2), getlens(str2, str1)); printf("%d\n", len); return 0;}

转载地址:http://tloji.baihongyu.com/

你可能感兴趣的文章
139. Word Break (DP)
查看>>
23. Merge k Sorted Lists (Divide and conquer, Linked List) 以及java匿名内部类
查看>>
Tensorflow入门资料
查看>>
剑指_用两个栈实现队列
查看>>
剑指_顺时针打印矩阵
查看>>
剑指_栈的压入弹出序列
查看>>
剑指_复杂链表的复制
查看>>
服务器普通用户(非管理员账户)在自己目录下安装TensorFlow
查看>>
星环后台研发实习面经
查看>>
大数相乘不能用自带大数类型
查看>>
字节跳动后端开发一面
查看>>
CentOS Tensorflow 基础环境配置
查看>>
centOS7安装FTP
查看>>
FTP的命令
查看>>
CentOS操作系统下安装yum的方法
查看>>
ping 报name or service not known
查看>>
FTP 常见问题
查看>>
zookeeper单机集群安装
查看>>
do_generic_file_read()函数
查看>>
Python学习笔记之数据类型
查看>>