codeM题目-寻找最小difference
来源:互联网 发布:淘宝网店开店流程2017 编辑:程序博客网 时间:2024/06/16 08:34
题目:
美团外卖的品牌代言人袋鼠先生最近正在进行音乐研究。他有两段音频,每段音频是一个表示音高的序列。现在袋鼠先生想要在第二段音频中找出与第一段音频最相近的部分。具体地说,就是在第二段音频中找到一个长度和第一段音频相等且是连续的子序列,使得它们的 difference 最小。两段等长音频的 difference 定义为:difference = SUM(a[i] - b[i])2 (1 ≤ i ≤ n),其中SUM()表示求和 其中 n 表示序列长度,a[i], b[i]分别表示两段音频的音高。现在袋鼠先生想要知道,difference的最小值是多少?数据保证第一段音频的长度小于等于第二段音频的长度。
输入描述:
- 第一行一个整数n(1 ≤ n ≤ 1000),表示第一段音频的长度。
- 第二行n个整数表示第一段音频的音高(0 ≤ 音高 ≤ 1000)。
- 第三行一个整数m(1 ≤ n ≤ m ≤ 1000),表示第二段音频的长度。
- 第四行m个整数表示第二段音频的音高(0 ≤ 音高 ≤ 1000)。
输出描述:
- 输出difference的最小值
输入例子:
21 243 1 2 4
输出例子:
0
#include <stdio.h>#include <iostream>using namespace std;int cal_difference(int *a,int *b,int n){ int res=0; for(int i=0;i<n;++i) { int dif=a[i]-b[i]; res = res + dif*dif; } return res;}int main(){ int n=0,m=0; scanf("%d",&n); int *a=new int[n]; for(int i=0;i<n;++i) scanf("%d",&a[i]); scanf("%d",&m); int *b=new int[m]; for(int i=0;i<m;++i) scanf("%d",&b[i]); if(n==m) { cout<<cal_difference(a,b,n)<<endl; return 0; } int len=m-n; int diff=0x7fffffff; for(int i=0;i<=len;++i) { int tmp=cal_difference(a,b+i,n); if(tmp<diff) { diff=tmp; } if(diff == 0) { break; } } cout<<diff<<endl; delete a; delete b; return 0;}
阅读全文
0 0
- codeM题目-寻找最小difference
- Num 17: NYOJ: 题目2016 :数据的交换输出[ 寻找数组中的最大(最小)数 ]
- codeM题目-小美最多可以活到第几轮
- 题目1498:寻找表达式
- 题目1034:寻找大富翁
- 题目1034:寻找大富翁
- 题目1034:寻找大富翁
- 题目:寻找峰值
- 题目1034:寻找大富翁
- 题目1034:寻找大富翁
- 题目1034:寻找大富翁
- 题目1498:寻找表达式
- 题目1034:寻找大富翁
- 寻找K最小
- 寻找最小回文数
- 寻找最小数
- [LintCode] 最小差 The Smallest Difference
- 寻找JAVA练习题目,,速度
- ssl和tsl区别
- Mac/Windows下,Python3安装Scrapy模块
- PHP 开发环境搭建
- 一个测试工程师的职业生涯感悟
- javassist 动态生成WebService
- codeM题目-寻找最小difference
- MySQL删除列无响应问题
- [转]Java 枚举7常见种用法
- pptp iptables snat记录
- PHP 压缩文件夹
- compile vim with python
- C++搜索与回溯算法之置棋问题
- make[1]: warning: Clock skew detected. Your build may be incomplete.
- iOS开发之如何在Xcode中显示断点堆栈