#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++){
//case 1:
int a = i;
int b = arr[a]+a;
int c = arr[b]+a;
if(checkTriple(a,b,c,arr)){
triples.insert({a,b,c});
}
//case 2:
a=i;
c=arr[a]+a;
b=c-arr[c];
if(checkTriple(a,b,c,arr)){
triples.insert({a,b,c});
}
//case 3:
a=i;
c=arr[a]+a;
b=arr[c]+a;
if(checkTriple(a,b,c,arr)){
triples.insert({a,b,c});
}
//case 4:
a=i;
b=arr[a]+a;
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];
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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |