Submission #1318002

#TimeUsernameProblemLanguageResultExecution timeMemory
1318002windowwife3개의 봉우리 (IOI25_triples)C++20
Compilation error
0 ms0 KiB
#define rtgsp #ifndef rtgsp #include "triples.h" #endif // rtgsp #include<bits/stdc++.h> #define ll long long #define task "" using namespace std; const int maxn = 2e5 + 2; int n, h[maxn], res, row[maxn], col[maxn]; vector<int> cr, cc, r[maxn], c[maxn]; ll count_triples(vector<int> H) { res = 0; cr.clear(); cc.clear(); n = (int)H.size(); for (int i = 0; i < n; i++) { h[i] = H[i]; r[i].clear(); c[i].clear(); cr.push_back(h[i] - i); cc.push_back(h[i] + i); } sort(cr.begin(), cr.end()); cr.resize(unique(cr.begin(), cr.end()) - cr.begin()); sort(cc.begin(), cc.end()); cc.resize(unique(cc.begin(), cc.end()) - cc.begin()); for (int i = 0; i < n; i++) { int x = lower_bound(cr.begin(), cr.end(), h[i] - i) - cr.begin(); r[x].push_back(i); row[i] = x; } for (int i = n - 1; i >= 0; i--) { int x = lower_bound(cc.begin(), cc.end(), h[i] + i) - cc.begin(); c[x].push_back(i); col[i] = x; } for (int i = 0; i < n - 2; i++) { int k = h[i] + i; if (k < n) { int j = k - h[k]; if (j > i && h[j] == j - i) res++; if (h[k] + i != k - h[k]) { j = h[k] + i; if (j < k && h[j] == k - j) res++; } } int j = h[i] + i; if (j < n - 1) { int k = h[j] + i; if (k > j && k < n && h[k] == k - j) res++; } } for (int k = 2; k < n; k++) { int i = k - h[k]; if (i >= 0) { int j = h[i] + i; if (j < k && h[j] == k - j) res++; if (k - h[i] != h[i] + i) { j = k - h[i]; if (j > i && h[j] == j - i) res++; } } } for (int j = 1; j < n - 1; j++) { if (r[row[j]].size() < c[col[j]].size()) { for (int i : r[row[j]]) { if (i == j) break; int k = h[i] + j; if (k < n && h[j] == k - i && h[k] == j - i && h[k] != k - j) res++; } } else { for (int k : c[col[j]]) { if (k == j) break; int i = j - h[k]; if (i >= 0 && h[i] == k - j && h[i] != j - i && h[j] == k - i) res++; } } } return res; } ll randint (ll l, ll r) { ll res = 0; for (int i = 0; i < 4; i++) res = (res << 15) ^ (rand() & ((1 << 15) - 1)); return l + res % (r - l + 1); } vector<int> ans, even; vector<int> construct_range(int M, int K) { ans.resize(M, 0); int seed = 0; while (true) { mt19937 rd(seed); even.clear(); for (int d = 0; d <= M; d += 2) even.push_back(d); shuffle(even.begin(), even.end(), rd); for (int i = 0; i < M; i++) ans[i] = 0; for (int i = 1; i < (int)min(14000, (int)even.size()); i++) { for (int j = 0; j < i; j++) { if (ans[(even[i] + even[j])/2] == 0) { ans[(even[i] + even[j])/2] = abs(even[i] - even[j])/2; } } } for (int i = 0; i < M; i++) if (ans[i] == 0) ans[i] = 1; int cnt = count_triples(ans); cerr << "seed = " << seed << '\n'; cerr << "peaks = " << cnt << '\n'; cerr << "score = " << min((long double)1, (long double)cnt/K) << '\n'; if (cnt >= K) break; ++seed; } return ans; } #ifdef rtgsp int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); /*string s; int N; vector<int> H; H.clear(); cin >> s >> N >> N; for (int i = 0; i < N; i++) { int x; cin >> x; H.push_back(x); } cout << count_triples(H);*/ int M = 500, K = 30; cin >> M >> K; auto v = construct_range(M, K); cout << v.size() << '\n'; for (int x : v) cout << x << " "; } #endif // rtgsp

Compilation message (stderr)

/usr/bin/ld: /tmp/ccs4Gedl.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccw72Vrr.o:triples.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status