Submission #1252920

#TimeUsernameProblemLanguageResultExecution timeMemory
1252920zipdang04Triple Peaks (IOI25_triples)C++20
12.70 / 100
14 ms2632 KiB
#include <bits/stdc++.h> using namespace std; /* #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; */ typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; template <class T> using PQMax = priority_queue<T>; template <class T> using PQMin = priority_queue<T, vector<T>, greater<T>>; template <class T1, class T2> void maximize(T1 &a, T2 b){ if (b > a) a = b; } template <class T1, class T2> void minimize(T1 &a, T2 b){ if (b < a) a = b; } template <class T> void read(T &number) { bool negative = false; register int c; number = 0; c = getchar(); while (c != '-' && !isalnum(c)) c = getchar(); if (c=='-'){ negative = true; c = getchar(); } for (; (c>47 && c<58); c=getchar()) number = number *10 + c - 48; if (negative) number *= -1; } template <class T, class ...Ts> void read(T &a, Ts& ... args){ read(a); read(args...); } /* struct Node { int node, len; Node() {node = len = 0;} Node(int node, int len) {this -> node = node, this -> len = len;} }; typedef vector<Node> vg; */ #define fi first #define se second #define FOR(type, i, a, b) for(type i = (a); i <= (b); i++) #define REV(type, i, b, a) for(type i = (b); i >= (a); i--) #define testBit(n, bit) (((n) >> (bit)) & 1) #define flipBit(n, bit) ((n) ^ (1ll << (bit))) #define cntBit(n) __builtin_popcount(n) #define cntBitll(n) __builtin_popcountll(n) #define log2(n) (31 - __builtin_clz(n)) #define log2ll(n) (63 - __builtin_clzll(n)) #define CURRENT_TIMESTAMP chrono::steady_clock::now().time_since_epoch().count() #define randomize mt19937_64 mt(CURRENT_TIMESTAMP) #define MAX 200005 #define MOD 1000000007 randomize; struct Rand { ll next(ll n) { return mt() % n; } ll next(ll l, ll r) { return l + next(r-l+1); } } rnd; int N, H[MAX], K; namespace Subtask4 { bool check(int i, int j, int k) { int a = abs(k-i), b = abs(k-j), c = abs(j-i); i = H[i], j = H[j], k = H[k]; // cerr << i << ' ' << j << ' ' << k << '|' << a << ' ' << b << ' ' << c << '\n'; if (i > j) swap(i, j); if (i > k) swap(i, k); if (j > k) swap(j, k); if (a > b) swap(a, b); if (a > c) swap(a, c); if (b > c) swap(b, c); return a == i and b == j and c == k; } ll solve() { // cerr << "here" << N << "\n"; ll ans = 0; for (int k = 2; k < N; k++) { // H[k] = k-i int i = k - H[k]; if (i < 0 or i > k-2) continue; // case 1: H[i] == j-i int j1 = H[i] + i; // cerr << "> " << i << j1 << k << '\n'; if (i < j1 and j1 < k) ans += check(i, j1, k); // case 1: H[i] == k-j int j2 = k - H[i]; // cerr << "> " << i << j2 << k << '\n'; if (j2 != j1 and i < j2 and j2 < k) ans += check(i, j2, k); } return ans; } } long long count_triples(std::vector<int> _H) { N = _H.size(); FOR(int, i, 0, N-1) H[i] = _H[i]; return Subtask4::solve(); return 0ll; } std::vector<int> construct_range(int _M, int _K) { N = _M; K = _K; for (int i = 0; i < N; i++) H[i] = rnd.next(1, 2); return vector<int>(H, H + N); }

Compilation message (stderr)

triples.cpp: In function 'void read(T&)':
triples.cpp:28:18: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   28 |     register int c;
      |                  ^
#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...