• 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;
    }
  • 相关阅读:
    MySql 免安装配置
    MySql 语句优化的几个小建议
    Sharding-JDBC 公共表
    Sharding-JDBC 垂直分库
    Sharding-JDBC 水平分库
    Vuejs基础使用
    webpack配置开发环境和生产环境
    webpack常见应用
    webpack-用loader加载css样式、图片、字体、数据
    webpack核心概念-模式/loader/插件及其他
  • 原文地址:https://www.cnblogs.com/weedboy/p/7029465.html
Copyright © 2020-2023  润新知