답안 #570087

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
570087 2022-05-28T14:18:14 Z davi_bart 이상적인 도시 (IOI12_city) C++17
0 / 100
17 ms 10392 KB
#pragma GCC optimize("O3")
#pragma GCC target("popcnt")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define int ll
#define fi first
#define se second
#define pb push_back
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
static const ll mod = 1e9;
int N;
vector<ll> v[100010];
map<ll, ll> ans[100010];
signed DistanceSum(signed n, signed *X, signed *Y) {
    N = n;
    int mi = X[0];
    for (int i = 0; i < N; i++) {
        mi = min(mi, (int)X[i]);
    }
    for (int i = 0; i < N; i++) {
        X[i] -= mi;
        v[X[i]].pb(Y[i]);
    }
    ll tot = 0;
    ll fatte = 0;
    for (int i = 0; i < N; i++) {
        if (v[i].size() == 0) break;
        sort(v[i].begin(), v[i].end());
        for (int j = 0; j < v[i].size(); j++) {
            ll prima = j;
            ll dopo = v[i].size() - j - 1;
            ans[i][v[i][j]] = prima * (prima + 1) / 2 + dopo * (dopo + 1) / 2;
            tot += dopo * (dopo + 1) / 2;
            if (i) {
                ll cur = v[i][j];
                cur = max(cur, v[i - 1][0]);
                cur = min(cur, v[i - 1].back());
                // cout << cur << " " << v[i][j] << " " << fatte << " " << ans[i - 1][cur] << endl;
                tot += (ll)(1 + abs(v[i][j] - cur)) * fatte + ans[i - 1][cur];
                ans[i][j] += (ll)(1 + abs(v[i][j] - cur)) * fatte + ans[i - 1][cur];
            }
            ans[i][v[i][j]] %= mod;
            tot %= mod;
            // cout << i << " " << j << " " << ans[i][j] << endl;
        }
        // cout << i << " " << ans[i][0] << endl;
        fatte += v[i].size();
    }
    return tot;
}

Compilation message

city.cpp: In function 'int DistanceSum(int, int*, int*)':
city.cpp:30:27: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |         for (int j = 0; j < v[i].size(); j++) {
      |                         ~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 7252 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 7508 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 14 ms 10088 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 17 ms 10392 KB Output isn't correct
2 Halted 0 ms 0 KB -