C++题解 P4445 4、排队 (line.pas/c/cpp)

原题: 4445.4、排队 (line.pas/c/cpp) FHD_WOLF -2024-2-3.


这是2019年绍兴市的第四题。感觉挺水的。(个人)
记得有一年绍兴市也考到了前缀和及差分。但那是二维的。

首先,这道题考的不是前缀和,是前缀差分。

来讲一下前缀差分:
例: 1 2 3 5
差分: 0 1 2 4
违和度:0 1 2 4
不难发现,差分就和违和度一样。
再讲一下如何让查找差分:
这是生成。
h[i]=h[i-1]+abs(x[i-1]-x[i]);
这是查找:
h[i+m-1]-h[i];
上面这两行就是主要代码了。
接下来就看代码了。

#include//头文件
using namespace std;
long long n,m,x[100010];
long long h[100010]={0},maxn=INT_MAX;//定义
int main()
{
    cin>>n>>m;//输入
    h[0]=0;//清零
    for(int i=1;i<=n;i++)//循环
    {
        cin>>x[i];//输入
        if(i!=1)//因为第一个位子是前面没有数,所以是0
        {
            h[i]=h[i-1]+abs(x[i]-x[i-1]);//生成,存储
        }
    }
    for(int i=1;i<=n;i++)//循环
    {
        if(i+m-1<=n) maxn=min(maxn,h[i+m-1]-h[i]);//查找区间违和度,并打擂台找最小
    }
    cout<

你可能感兴趣的:(c++,c语言,java)