Submission #1255526

#TimeUsernameProblemLanguageResultExecution timeMemory
1255526Aviansh3개의 봉우리 (IOI25_triples)C++20
24 / 100
2097 ms29092 KiB
#include "triples.h"

#include <bits/stdc++.h>

using namespace std;

bool checkTriple(int i, int j, int k, vector<int>&arr){
    if(!(i<j&&j<k)){
        return 0;
    }
    int n = arr.size();
    if(i<0||j<0||k<0||i>=n||j>=n||k>=n){
        return 0;
    }
    vector<int>arr1 = {j-i,k-i,k-j};
    vector<int>arr2 = {arr[i],arr[j],arr[k]};
    sort(arr1.begin(),arr1.end());
    sort(arr2.begin(),arr2.end());
    if(arr1[0]==arr2[0]&&arr1[1]==arr2[1]&&arr1[2]==arr2[2]){
        return 1;
    }
    return 0;
}

long long count_triples(vector<int> arr) {
    int n = arr.size();
    set<array<int,3>>triples;
    map<int,vector<int>>mp;
    for(int i = 0;i<n;i++){
        mp[arr[i]-i].push_back(i);
    }
    for(int i = 0;i<n;i++){
        int a,b,c;
        //case 1:
        a = i;
        b = arr[a]+a;
        if(b>=0&&b<n)
            c = arr[b]+a;
        if(checkTriple(a,b,c,arr)){
            triples.insert({a,b,c});
        }
        //case 2:
        a=i;
        c=arr[a]+a;
        if(c>=0&&c<n)
            b=c-arr[c];
        if(checkTriple(a,b,c,arr)){
            triples.insert({a,b,c});
        }
        //case 3:
        a=i;
        c=arr[a]+a;
        if(c>=0&&c<n)
            b=arr[c]+a;
        if(checkTriple(a,b,c,arr)){
            triples.insert({a,b,c});
        }
        //case 4:
        a=i;
        b=arr[a]+a;
        if(b>=0&&b<n)
            c=arr[b]+b;
        if(checkTriple(a,b,c,arr)){
            triples.insert({a,b,c});
        }
        //case 5:
        //later

        //case 6:
        b=i;
        a=b-arr[b];
        if(a>=0&&a<n)
            c=arr[a]+b;
        if(checkTriple(a,b,c,arr)){
            triples.insert({a,b,c});
        }
    }

    for(pair<int,vector<int>>p:mp){
        int siz = p.second.size();
        for(int i = 0;i<siz;i++){
            for(int j = i+1;j<siz;j++){
                int a = p.second[i];
                int b = p.second[j];
                int c = arr[b]+a;
                if(checkTriple(a,b,c,arr)){
                    triples.insert({a,b,c});
                }
            }
        }
    }
    return triples.size();
}

vector<int> construct_range(int M, int K) {
  return {1, 1, 1};
}
#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...