相似歌曲(YOJ2.0中的题)
又水了一道数组题
这次比较快,而且是一遍过
代码如下:
#include<stdio.h>
#include<math.h>
int main(void)
{
int Q_frequency[16] = {0};
int n_0;
scanf("%d", &n_0);
for(int i = 0; i < n_0; i++)
{
int tmp;
scanf("%d", &tmp);
Q_frequency[tmp / 16] += 1;
}
int n, k;
scanf("%d%d", &n, &k);
int S_frequency[n][16];
for(int i = 0; i < n; i++)
for(int j = 0; j < 16; j++)
S_frequency[i][j] = 0;
for(int i = 0; i < n; i++)
{
scanf("%d", &n_0);
for(int j = 0; j < n_0; j++)
{
int tmp;
scanf("%d", &tmp);
S_frequency[i][tmp / 16] += 1;
}
}
//开始计算近似度
double similarity[n];
for(int i = 0; i < n; i++)
{
double tmp = 0.0;
for(int j = 0; j < 16; j++)
tmp += pow(Q_frequency[j] - S_frequency[i][j], 2.0);
similarity[i] = sqrt(tmp);
}
//输出
for(int i = 0; i < k; i++)
{
int id;
double x = 100000000000000.0;
for(int j = 0; j < n; j++)
{
if(similarity[j] < x && similarity[j] != -1)
{
x = similarity[j];
id = j;
}
}
if(i)
putchar(' ');
printf("%d", id);
similarity[id] = -1;
}
return 0;
}