求hack
查看原帖
求hack
551870
consequence楼主2023/10/6 19:52
#include <bits/stdc++.h>

using namespace std;

const int MAXT = 4e6 + 128;
const int MAXN = 500 + 10;
long long dp[MAXT], cnt[MAXT];
vector<int> v[MAXT];
long long fans = LLONG_MAX;
int n, m, maxt, t;

long long sum(int x, int y)
{
    long long ans = 0;
    for (int i = x; i <= y; ++i)
    {
        cnt[y] += v[i].size();
        ans += v[i].size() * (y - i);
    }
    return ans;
}

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; ++i)
    {
        cin >> t;
        v[t].push_back(i);
        maxt = max(maxt, t);
    }
  //  sort(t + 1, t + 1 + n);
    for (int i = 0; i <= maxt + m; ++i)
    {
        if (i >= m)
        {
            long long nsum = sum(i - m + 1, i);
            if (dp[i - 1] + cnt[i - 1] <= dp[i - m] + nsum)
            {
                cnt[i] = cnt[i - 1] + v[i].size();
                dp[i] = dp[i - 1] + cnt[i - 1];
            }
            else
            {
                dp[i] = dp[i - m] + nsum;
 //              cnt[i] += v[i].size();
            }
        }
        else
        {
            dp[i] = (i ? dp[i - 1] + cnt[i - 1] : 0);
            cnt[i] = (i ? cnt[i - 1] : 0) + v[i].size();
        }
 //       cout << i << ' ' << dp[i] << ' ' << v[i].size() << endl;
    }
 //   cout << endl;
    for (int i = maxt; i <= maxt + m; ++i)
    {
        fans = min(fans, dp[i]);
    }
    cout << fans << endl;
    return 0;
}

80分玄学没TLE但WA

2023/10/6 19:52
加载中...