zoukankan      html  css  js  c++  java
  • CodeM资格赛1

    题目描述

    美团外卖的品牌代言人袋鼠先生最近正在进行音乐研究。他有两段音频,每段音频是一个表示音高的序列。现在袋鼠先生想要在第二段音频中找出与第一段音频最相近的部分。

    具体地说,就是在第二段音频中找到一个长度和第一段音频相等且是连续的子序列,使得它们的 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的最小值

    输入例子:

    2
    1 2
    4
    3 1 2 4

    输出例子:

    0


    ac代码
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    using namespace std;
    int main()
    {
        int n, m;
        int first[1005],second[1005];
        int temp;
        cin >> n;
        for (int i = 0;i < n;i++) { cin >> first[i]; }
        cin >> m;
        for (int i = 0;i < m;i++) { cin >> second[i]; }
    
        int ans = -1;
        for (int pos = 0;pos < m-n+1;pos++) {
            int sum = 0;
            for (int j = 0;j < n;j++) {
                sum += (first[j] - second[j + pos])*(first[j] - second[j + pos]);
            }
            if (ans==-1||sum < ans) ans = sum;
        }
        cout << ans << endl;
        //cout << "hello" << endl;
        return 0;
    }
  • 相关阅读:
    人心散了、项目必然要败(转自CSDN)
    sql server加锁机制
    数据库事物隔离级别
    aop学习
    数据库加锁(转)
    托管代码和非托管代码效率的对比。
    day05 Linux文本处理命令
    day04 CentOS 异常,问题解决方法
    day02 Linux系统介绍与安装
    linux常用命令的英文单词缩写
  • 原文地址:https://www.cnblogs.com/weedboy/p/7029465.html
Copyright © 2011-2022 走看看