Submission #1253437

#TimeUsernameProblemLanguageResultExecution timeMemory
1253437abcdxyz123Triple Peaks (IOI25_triples)C++17
35 / 100
100 ms15528 KiB
#include "triples.h" #include<bits/stdc++.h> using namespace std; #define maxn 200005 #define ll long long #define pi pair<int,int> #define pii pair<pi,int> #define all(x) x.begin(),x.end() int n; int h[maxn]; vector<int>pos[maxn]; int numTriplet; ll triplet[6*maxn]; ll mask(int i,int j,int k) { return 1LL*i*(n+1)*(n+1)+1LL*j*(n+1)+k; } bool isValid(int i,int j,int k) { if(1<=i&&i<j&&j<k&&k<=n) { vector<int>A={h[i],h[j],h[k]}; vector<int>B={j-i,k-j,k-i}; sort(all(A)); sort(all(B)); if(A==B) { triplet[++numTriplet]=mask(i,j,k); return 1; } } return 0; } void brute() { int res=0; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { for(int k=j+1;k<=n;k++) { res+=isValid(i,j,k); } } } cout<<"Brute:"<<res<<'\n'; } ll count_triples(vector<int> H) { n=H.size(); for(int i=0;i<n;i++)h[i+1]=H[i]; //brute(); numTriplet=0; for(int j=1;j<=n;j++) { if(j-h[j]>=1)isValid(j-h[j],j,j-h[j]+h[j-h[j]]); if(j+h[j]<=n)isValid(j-h[j+h[j]],j,j+h[j]); if(j+h[j]<=n)isValid(j+h[j]-h[j+h[j]],j,j+h[j]); if(j-h[j]>=1)isValid(j-h[j],j,j+h[j-h[j]]); } for(int k=1;k<=n;k++) { int mid=k-h[k]; if(1<=mid)pos[mid].push_back(k); } for(int i=1;i<=n;i++) { int mid=i+h[i]; if(mid<=n) { for(int k:pos[mid]) { isValid(i,i+h[i],k); isValid(i,i+h[k],k); } } } sort(triplet+1,triplet+numTriplet+1); numTriplet=unique(triplet+1,triplet+numTriplet+1)-triplet-1; return numTriplet; } 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...