小学数学 - 噪音

Posted lrw04

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小学数学 - 噪音相关的知识,希望对你有一定的参考价值。

题面

【问题描述】

Robin要到一个小区租房子,他找到的小区是一个(nn)的矩阵(有nn个方格)。小区里有两台割草机,每到周末就要割草,产生很多噪音。割草机每次割草要走到m(m<=n*n)个地方,第i个地方的坐标为(x[i](行),y[i](列)),制造q[i]点噪音值,小区的噪音十分独特,声音只会横着或竖着传播。每传播一格,噪音值会增加1。(传播的格子数取最小的),Robin选的房子的坐标要在矩阵内。但噪音让他十分头疼。他想求出噪音值最小的地方。

【输入格式】

第一行输入n、m。

接下来m行,每行3个正整数x[i],y[i]和q[i]。

【输出格式】

第一行一个整数表示噪音值最小是多少。

接下来一行两个正整数zb1和zb2,表示噪音值最小的地方的坐标(如果有多个答案,输出横坐标最小的情况下,纵坐标最小的)。

【输入输出样例1】

3 3
1 1 1
1 2 1
1 3 1
5
1 2

【数据范围】

10%的数据,n<=10(来自题目的馈赠).

30%的数据,n<=1000.

100%的数据,0<n<=100000,0<m<=100000,0<q[i]<=100.

【样例1解释】

(1,1)的初始噪音值为1,(1,2)的初始噪音值为1,(1,3)的初始噪音值为1,(1,1)与(1,2)的距离为1(abs(1-1)+abs(1-2)),传播过程中增加的噪音值为1。(1,2)与(1,2)的距离为0,传播过程中的噪音值为0,(1,3)与(1,2)的距离为1,传播过程中的增加的噪音值为1。总噪音值为1+1+1+1+0+1=5。

设答案取得时 Robin 家在 ((x, y)) 处。则噪声值为
[sum_{i=1}^mq_i+|x-x_i|+|y-y_i|]. 我们可以将其分离。(sum q) 是常数,而且假如 (sum|x-x_i|)(sum|y-y_i|) 都取全局最小值的话,噪声值就能取到最小值。如此,只要 (x=x_{lfloorfrac{m + 1}{2} floor}),
(y=y_{lfloorfrac{m + 1}{2} floor}) (令 (x_1le x_2lecdots x_m), (y_1le y_2lecdots y_m)).

在具体求出时,我们不必把所有的 (x_i)_{i=1}^m), ((y_i)_{i=1}^m) 都排序,我们可以使用 std::nth_element() 在线性时间复杂度下完成。

程序

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
 
#define MAXN 100020
int n, m, xs[MAXN], ys[MAXN];
int xo[MAXN], yo[MAXN], qs[MAXN];
 
int main() {
    ios::sync_with_stdio(false);
     
    cin >> n >> m;
    for (int i = 0; i < m; i++)
        cin >> xo[i] >> yo[i] >> qs[i];
    for (int i = 0; i < m; i++) {
        xs[i] = xo[i];
        ys[i] = yo[i];
    }
    int mid = m / 2 - (m % 2 ? 0 : 1);
    nth_element(xs, xs + mid, xs + m);
    nth_element(ys, ys + mid, ys + m);
    long long ans = 0;
    int ansx = xs[mid], ansy = ys[mid];
    for (int i = 0; i < m; i++)
        ans += qs[i] + abs(ansx - xo[i]) + abs(ansy - yo[i]);
    cout << ans << endl << ansx << " " << ansy << endl;
    return 0;
}

以上是关于小学数学 - 噪音的主要内容,如果未能解决你的问题,请参考以下文章

中小学数学题生成程序代码分析

中小学数学卷子自动生成程序——结对分析

中小学数学卷子自动生成程序-结对编程之队友代码分析

结对编程——中小学数学出题系统项目互评

小学数学常用词汇英汉对照

中小学数学卷子自动生成 - 结对项目wjy的代码分析