Submission #1256723

#TimeUsernameProblemLanguageResultExecution timeMemory
1256723medmdgTriple Peaks (IOI25_triples)C++20
18 / 100
15 ms2628 KiB
#include "triples.h"
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
vector<int> H;
ll n;
bool check(ll i,ll j,ll k){
  if(i<0||j<0||k<0||i>=n||j>=n||k>=n)return 0;
  ll s1[3],s2[3];
  s1[0]=(abs(j-i));
  s1[1]=(abs(k-i));
  s1[2]=(abs(j-k));
  sort(s1,s1+3);
  if(s1[0]==0)return 0;
  s2[0]=(H[i]);
  s2[1]=(H[j]);
  s2[2]=(H[k]);
  sort(s2,s2+3);
  return s1[0]==s2[0]&&s1[1]==s2[1]&&s1[2]==s2[2];
}
ll sub4(){
  ll ans=0;
  for(int i=n-1;i>1;i--){
    ll x2=i-H[i];
    if(x2<0)continue;
    ll x3=x2+H[x2],x4=i-H[x2];
    if(x3<i && i-x3==H[x3])ans++;
    if(x3!=x4)
    if(x4>x2 && x4-x2==H[x4])ans++;
  }
  return ans;
}
ll sub2(){
  return 0;
}
ll sub3(){
  ll ans=0;
  for(ll i=0;i<n;i++){
    //Check M a b
    while(1){
      ll x2=i+H[i];
      if(x2>=n)break;
      ll x3=x2-H[x2],x4=i+H[x2];
      if(x3>i && x3-i==H[x3])ans++;
      if(x3!=x4)
      if(x4<x2 && x2-x4==H[x4])ans++;
      break;
    }
    //check a b M
    while(1){
      ll x2=i-H[i];
      if(x2<0)break;
      ll x3=x2+H[x2],x4=i-H[x2];
      if(x3<i && i-x3==H[x3])ans++;
      if(x3!=x4)
      if(x4>x2 && x4-x2==H[x4])ans++;
      break;
    }
    //check a M b
    ll l=max(0LL,i-H[i]+1);
    ll r=min(i,n-H[i]);
    for(int j=l;j<r;j++){
      ans+=check(j,i,j+H[i]);
    }
  }
  return ans;
}
ll count_triples(vector<int> h) {
  n=h.size();

  H=h;
  if(n<2001)return sub3();
  else return 0;
}

std::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...