首页 > 代码库 > CodeM Qualifying Match Q1
CodeM Qualifying Match Q1
问题描述:
具体地说,就是在第二段音频中找到一个长度和第一段音频相等且是连续的子序列,使得它们的 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
1 import java.util.Scanner; 2 3 public class Q1 4 { 5 public static void main(String[] args) 6 { 7 Scanner sc = new Scanner(System.in); 8 int a_length = sc.nextInt(); 9 int a[] = new int[a_length]; 10 for(int i=0;i<a_length;i++) 11 { 12 a[i]=sc.nextInt(); //仍可以实现空格读取 13 } 14 int b_length = sc.nextInt(); 15 int b[] = new int[b_length]; 16 for(int u=0;u<b_length;u++) 17 { 18 b[u] = sc.nextInt(); 19 } 20 int n=0; 21 int difference=0; 22 while(n<=(b_length-a_length)) 23 { 24 int temp=0; 25 for(int k=0;k<(a_length);k++) 26 { 27 temp += Math.pow(a[k]-b[k+n],2); //math.pow(基底,幂) 28 } 29 if(n==0 || difference>temp) 30 { 31 difference=temp; 32 } 33 n++; 34 } 35 System.out.println(difference); 36 for(int p=0;p<b_length;p++) 37 { 38 System.out.print(b[p]); 39 } 40 41 } 42 }
CodeM Qualifying Match Q1
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。