제출 #1316682

#제출 시각아이디문제언어결과실행 시간메모리
1316682ezzzay3개의 봉우리 (IOI25_triples)C++17
11 / 100
95 ms21520 KiB
//#include "triples.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
long long count_triples(vector<int> H) {
    vector<int> h;
    for(auto a:H) h.pb(a);
    set<vector<int>> ST;
    int n = H.size();
    ll cnt = 0;

    for(int i = 0; i < n; ++i) {
        // pattern 1: j = i + H[i], k = j + H[j]
        int j = i + h[i];
        if (j < n) {
            int k = j + h[j]; // safe because j < n
            if (k < n && i < j && j < k) {
                multiset<int> st = {H[i], H[j], H[k]};
                if (st.find(j - i) != st.end()) st.erase(st.find(j - i));
                if (st.find(k - i) != st.end()) st.erase(st.find(k - i));
                if (st.find(k - j) != st.end()) st.erase(st.find(k - j));
                if (st.empty()) ST.insert({i, j, k});
            }
        }
    }

    for(int i = 0; i < n; ++i) {
        // pattern 2: j = i + H[i], k = i + H[j]
        int j = i + h[i];
        if (j < n) {
            int k = i + h[j];
            if (k < n && i < j && j < k) {
                multiset<int> st = {H[i], H[j], H[k]};
                if (st.find(j - i) != st.end()) st.erase(st.find(j - i));
                if (st.find(k - i) != st.end()) st.erase(st.find(k - i));
                if (st.find(k - j) != st.end()) st.erase(st.find(k - j));
                if (st.empty()) ST.insert({i, j, k});
            }
        }
    }

    for(int i = 0; i < n; ++i) {
        // pattern 3: k = i + H[i], j = k - H[k]
        int k = i + h[i];
        if (k < n) {
            int j = k - h[k];
            if (j >= 0 && i < j && j < k) {
                multiset<int> st = {H[i], H[j], H[k]};
                if (st.find(j - i) != st.end()) st.erase(st.find(j - i));
                if (st.find(k - i) != st.end()) st.erase(st.find(k - i));
                if (st.find(k - j) != st.end()) st.erase(st.find(k - j));
                if (st.empty()) ST.insert({i, j, k});
            }
        }
    }

    for(int i = 0; i < n; ++i) {
        // pattern 4: k = i + H[i], j = i + H[k]
        int k = i + h[i];
        if (k < n) {
            int j = i + h[k];
            if (j < n && i < j && j < k) { // j must be < k
                multiset<int> st = {H[i], H[j], H[k]};
                if (st.find(j - i) != st.end()) st.erase(st.find(j - i));
                if (st.find(k - i) != st.end()) st.erase(st.find(k - i));
                if (st.find(k - j) != st.end()) st.erase(st.find(k - j));
                if (st.empty()) ST.insert({i, j, k});
            }
        }
    }

    for(int j = 0; j < n; ++j) {
        // pattern 5: i = j - H[j], k = j + H[i]
        int i = j - h[j];
        if (i >= 0) {
            int k = j + h[i];
            if (k < n && i < j && j < k) {
                multiset<int> st = {H[i], H[j], H[k]};
                if (st.find(j - i) != st.end()) st.erase(st.find(j - i));
                if (st.find(k - i) != st.end()) st.erase(st.find(k - i));
                if (st.find(k - j) != st.end()) st.erase(st.find(k - j));
                if (st.empty()) ST.insert({i, j, k});
            }
        }
    }

    for(int j = 0; j < n; ++j) {
        // pattern 6: k = j + H[j], i = k - H[k]
        int k = j + h[j];
        if (k < n) {
            int i = k - h[k];
            if (i >= 0 && i < j && j < k) {
                multiset<int> st = {H[i], H[j], H[k]};
                if (st.find(j - i) != st.end()) st.erase(st.find(j - i));
                if (st.find(k - i) != st.end()) st.erase(st.find(k - i));
                if (st.find(k - j) != st.end()) st.erase(st.find(k - j));
                if (st.empty()) ST.insert({i, j, k});
            }
        }
    }

    cnt = (ll)ST.size();
    return cnt;
}


vector<int> construct_range(int M, int K) {
    
}

컴파일 시 표준 에러 (stderr) 메시지

triples.cpp: In function 'std::vector<int> construct_range(int, int)':
triples.cpp:110:1: warning: no return statement in function returning non-void [-Wreturn-type]
  110 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...