답안 #241006

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
241006 2020-06-22T05:37:48 Z SamAnd Sirni (COCI17_sirni) C++17
140 / 140
2922 ms 785400 KB
#include <bits/stdc++.h>
using namespace std;
#define m_p make_pair
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
#define fi first
#define se second
typedef long long ll;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
mt19937 rnf(2106);
const int N = 100005, M = 10000007;

int n;
int a[N];
int u[M], uu[M];

vector<pair<int, int> > v[M];

int p[N];
int fi(int x)
{
    if (x == p[x])
        return x;
    return p[x] = fi(p[x]);
}

void kpc(int x, int y)
{
    x = fi(x);
    y = fi(y);
    p[x] = y;
}

void solv()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i)
    {
        scanf("%d", &a[i]);
        u[a[i]] = i;
    }
    for (int i = M - 2; i >= 0; --i)
    {
        if (u[i])
        {
            uu[i] = u[i];
        }
        else
        {
            uu[i] = uu[i + 1];
        }
    }
    for (int i = 1; i < M; ++i)
    {
        if (!u[i])
            continue;
        v[a[uu[i + 1]] % i].push_back(m_p(u[i], uu[i + 1]));
        for (int j = i + i; j < M; j += i)
        {
            if (uu[j])
            {
                v[a[uu[j]] % i].push_back(m_p(u[i], uu[j]));
            }
        }
    }
    for (int i = 1; i <= n; ++i)
        p[i] = i;
    int ans = 0;
    for (int i = 0; i < M; ++i)
    {
        for (int j = 0; j < v[i].size(); ++j)
        {
            int x = v[i][j].fi;
            int y = v[i][j].se;
            if (fi(x) != fi(y))
            {
                kpc(x, y);
                ans += i;
            }
        }
    }
    printf("%d\n", ans);
}

int main()
{
    #ifdef SOMETHING
    freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    #endif // SOMETHING
    //ios_base::sync_with_stdio(false), cin.tie(0);
    solv();
    return 0;
}

//while ((double)clock() / CLOCKS_PER_SEC <= 0.9){}

Compilation message

sirni.cpp: In function 'void solv()':
sirni.cpp:71:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = 0; j < v[i].size(); ++j)
                         ~~^~~~~~~~~~~~~
sirni.cpp:36:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &n);
     ~~~~~^~~~~~~~~~
sirni.cpp:39:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &a[i]);
         ~~~~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 212 ms 278136 KB Output is correct
2 Correct 336 ms 305656 KB Output is correct
3 Correct 216 ms 278520 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 257 ms 274668 KB Output is correct
2 Correct 1848 ms 670140 KB Output is correct
3 Correct 240 ms 279032 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 210 ms 278520 KB Output is correct
2 Correct 207 ms 276856 KB Output is correct
3 Correct 209 ms 278392 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 404 ms 289316 KB Output is correct
2 Correct 775 ms 317916 KB Output is correct
3 Correct 452 ms 300380 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 247 ms 280440 KB Output is correct
2 Correct 619 ms 301704 KB Output is correct
3 Correct 502 ms 287632 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 607 ms 301268 KB Output is correct
2 Correct 1058 ms 336688 KB Output is correct
3 Correct 468 ms 299000 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 408 ms 279364 KB Output is correct
2 Correct 996 ms 336316 KB Output is correct
3 Correct 447 ms 300372 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 362 ms 327764 KB Output is correct
2 Correct 2037 ms 673820 KB Output is correct
3 Correct 364 ms 330292 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 357 ms 332060 KB Output is correct
2 Correct 2922 ms 785400 KB Output is correct
3 Correct 584 ms 387736 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 274 ms 311032 KB Output is correct
2 Correct 2646 ms 665740 KB Output is correct
3 Correct 470 ms 302672 KB Output is correct