• 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;
    }
  • 相关阅读:
    内部类
    java的静态方法多态和匿名对象
    java的重载 和重写
    java多态成员的特点
    java 接口的概念
    linux时间修改-hwclock和date
    mysql配置主从复制和常见问题
    mysql日志种类、二进制日志模式、mysqlbinlog解析二进制日志
    mysql主从复制介绍
    mysql备份与还原-mysqldump备份、mysql与source还原
  • 原文地址:https://www.cnblogs.com/weedboy/p/7029465.html
Copyright © 2020-2023  润新知