제출 #533685

#제출 시각아이디문제언어결과실행 시간메모리
533685rumen_mAliens (IOI16_aliens)C++17
컴파일 에러
0 ms0 KiB
// name = sol_ge_genetics.cpp, type = cpp.g++11 #include "aliens.h" #include <cstdio> #include <cmath> #include <cstdlib> #include <cassert> #include <ctime> #include <cstring> #include <string> #include <set> #include <map> #include <vector> #include <list> #include <deque> #include <queue> #include <sstream> #include <iostream> #include <algorithm> using namespace std; #define pb push_back #define mp make_pair #define fs first #define sc second const double pi = acos(-1.0); const int generation = 5000; const int iters = 100; vector <pair <int, int> > segs; random_device rd; mt19937 rgenerator(rd()); int genRandInt(int lb, int rb) { return lb + rgenerator() % (rb - lb + 1); } long long sqr(long long x) { return x * x; } long long get_value(vector <int>& ans) { long long res = 0; int lst = 0; int k = (int) ans.size(); for (int i = 1; i < k; i++) { res += sqr(segs[ans[i] - 1].sc - segs[lst].fs + 1); res -= sqr(max(0, segs[ans[i] - 1].sc - segs[ans[i]].fs + 1)); // cerr << res << endl; lst = ans[i]; } res += sqr(segs.back().sc - segs[lst].fs + 1); return res; } vector <int> genPureRandom(int n, int k) { set <int> active; active.insert(0); while ((int) active.size() < k) { active.insert(genRandInt(0, n - 1)); } return vector <int>(active.begin(), active.end()); } vector <int> mutate(int n, vector <int> ans) { int p = genRandInt(0, (int) ans.size() - 1); if (genRandInt(0, 1)) { if (ans[p] <= p) return ans; ans[p]--; for (int i = p - 1; i > 0; i--) { if (ans[i + 1] > ans[i]) break; ans[i]--; } } else { if ((int) ans.size() - ans[p] <= n - p) return ans; ans[p]++; for (int i = p + 1; i < (int) ans.size(); i++) { if (ans[i - 1] < ans[i]) break; ans[i]++; } } return ans; } vector <int> cross(int k, const vector <int>& a, const vector <int>& b) { int ps = genRandInt(0, k - 1); vector <int> active; active.insert(active.begin(), a.begin(), a.begin() + ps); active.insert(active.begin(), b.begin() + ps, b.end()); set <int> tmp(active.begin(), active.end()); while ((int) tmp.size() < k) tmp.insert(genRandInt(0, k - 1)); return vector <int>(tmp.begin(), tmp.end()); } long long take_photos(int n, int m, int k, vector <int> r, vector <int> c) { vector <pair <int, int> > pts; for (int i = 0; i < n; i++) pts.pb(mp(min(r[i], c[i]), -max(r[i], c[i]))); sort(pts.begin(), pts.end()); int cmx = -1; for (int i = 0; i < n; i++) { if (-pts[i].sc > cmx) { segs.pb(pts[i]); segs.back().sc *= -1; cmx = -pts[i].sc; } } cerr << "here " << segs.size() << endl; n = (int) segs.size(); k = min(n, k); vector <pair <long long, vector <int> > > curgen; for (int i = 0; i < generation; i++) { curgen.pb(mp(0ll, genPureRandom(n, k))); curgen.back().fs = get_value(curgen.back().sc); } sort(curgen.begin(), curgen.end()); while ((clock() + 0.0) / CLOCKS_PER_SEC < 1.9) { for (int j = 0; j < generation; j++) { curgen.pb(mp(0ll, mutate(n, curgen[genRandInt(0, (int) curgen.size() - 1)].sc))); curgen.back().fs = get_value(curgen.back().sc); } for (int j = 0; j < generation; j++) { curgen.pb(mp(0ll, cross(k, curgen[genRandInt(0, (int) curgen.size() - 1)].sc, curgen[genRandInt(0, (int) curgen.size() - 1)].sc))); curgen.back().fs = get_value(curgen.back().sc); } /* for (int i = 0; i < generation; i++) { curgen.pb(mp(0ll, genPureRandom(n, k))); curgen.back().fs = get_value(curgen.back().sc); } */ sort(curgen.begin(), curgen.end()); cerr << curgen[0].fs << endl; while ((int) curgen.size() > generation) curgen.pop_back(); } cerr << "segs" << endl; for (int i = 0; i < (int) segs.size(); i++) cerr << segs[i].fs << ' ' << segs[i].sc << endl; cerr << "ans" << endl; for (int i = 0; i < (int) curgen[0].sc.size(); i++) cerr << curgen[0].sc[i] << endl; return curgen[0].fs; } /* int main() { int n, m, k; scanf("%d %d %d", &n, &m, &k); std::vector<int> r(n), c(n); for (int i = 0; i < n; i++) { scanf("%d %d", &r[i], &c[i]); } long long ans = take_photos(n, m, k, r, c); // BEGIN SECRET puts("098d134608c94f7413faac591054ee35"); // END SECRET printf("%lld\n", ans); return 0; } */

컴파일 시 표준 에러 (stderr) 메시지

aliens.cpp:34:1: error: 'random_device' does not name a type; did you mean 'random_data'?
   34 | random_device rd;
      | ^~~~~~~~~~~~~
      | random_data
aliens.cpp:35:1: error: 'mt19937' does not name a type
   35 | mt19937 rgenerator(rd());
      | ^~~~~~~
aliens.cpp: In function 'int genRandInt(int, int)':
aliens.cpp:38:17: error: 'rgenerator' was not declared in this scope; did you mean 'generation'?
   38 |     return lb + rgenerator() % (rb - lb + 1);
      |                 ^~~~~~~~~~
      |                 generation