Submission #101878

# Submission time Handle Problem Language Result Execution time Memory
101878 2019-03-20T16:05:34 Z eriksuenderhauf Rail (IOI14_rail) C++11
Compilation error
0 ms 0 KB
//#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#include "rail.h"
//#include "grader.h"
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define enl printf("\n")
#define case(t) printf("Case #%d: ", (t))
#define ni(n) scanf("%d", &(n))
#define nl(n) scanf("%I64d", &(n))
#define nai(a, n) for (int i = 0; i < (n); i++) ni(a[i])
#define nal(a, n) for (int i = 0; i < (n); i++) nl(a[i])
#define pri(n) printf("%d\n", (n))
#define prl(n) printf("%I64d\n", (n))
#define pii pair<int, int>
#define pll pair<long long, long long>
#define vii vector<pii>
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef cc_hash_table<int,int,hash<int>> ht;
const double pi = acos(-1);
const int MOD = 1e9 + 7;
const int INF = 1e9 + 7;
const int MAXN = 5e3 + 5;
const double eps = 1e-9;
int d[MAXN][MAXN];
map<int,int> inv;

int dist(int x, int y) {
	if (x == y)
		return 0;
	if (x > y)
		swap(x, y);
	if (d[x][y] == 0)
		d[x][y] = getDistance(x, y);
	return d[x][y];
}

void solve(int l[], int s[], vi& x, int st, int en) {
	sort(x.begin(), x.end(), [](int l, int r) {
		return dist(st, l) < dist(st, r);
	});
	int sgn;
	if (s[st] == 1) // ((
		sgn = -1;
	else // ()
		sgn = 1;
	for (auto& t: x) {
		int val = (dist(en, t) + dist(st, en) - dist(st, t)) / 2;// get from en to en over the next free station
		val = l[en] + sgn * val;
		if (inv[val] == s[en]) {
			l[t] = val + d * (dist(st, t) - abs(l[st] - val));
			s[t] = s[st];
		} else {
			l[t] = l[st] - d * dist(st, t);
			s[t] = s[en];
			en = t;
		}
		inv[l[t]] = s[t];
	}
}

void findLocation(int n, int f, int l[], int s[]) {
	l[0] = f, s[0] = 1;
	inv[l[0]] = 1;
	if (n == 1)
		return;
	int pt = 1; // go the right
	for (int i = 2; i < n; i++)
		if (dist(0, pt) > dist(0, i))
			pt = i;
	l[pt] = l[0] + dist(0, pt);
	s[pt] = 2;
	inv[l[pt]] = 2;
	vi x, y;
	for (int i = 1; i < n; i++) {
		if (i == pt)
			continue;
		if (dist(pt, i) + dist(pt, 0) == dist(0, i)) {
			if (dist(pt, 0) > dist(pt, i)) { // case: (()
				l[i] = l[0] + dist(pt, 0) - dist(pt, i);
				s[i] = 1;
				inv[l[i]] = 1;
			} else { // )() and (() are possible
				x.pb(i);
			}
		} else {//()); if pt comes before 0 -> (() or ((( is possible
			y.pb(i);
		}
	}
	solve(l, s, x, pt, 0);
	solve(l, s, y, 0, pt);
}

Compilation message

rail.cpp: In lambda function:
rail.cpp:47:15: error: 'st' is not captured
   return dist(st, l) < dist(st, r);
               ^~
rail.cpp:46:28: note: the lambda has no capture-default
  sort(x.begin(), x.end(), [](int l, int r) {
                            ^
rail.cpp:45:41: note: 'int st' declared here
 void solve(int l[], int s[], vi& x, int st, int en) {
                                         ^~
rail.cpp:47:29: error: 'st' is not captured
   return dist(st, l) < dist(st, r);
                             ^~
rail.cpp:46:28: note: the lambda has no capture-default
  sort(x.begin(), x.end(), [](int l, int r) {
                            ^
rail.cpp:45:41: note: 'int st' declared here
 void solve(int l[], int s[], vi& x, int st, int en) {
                                         ^~
rail.cpp: In function 'void solve(int*, int*, std::vector<int>&, int, int)':
rail.cpp:58:19: error: invalid operands of types 'int [5005][5005]' and 'int' to binary 'operator*'
    l[t] = val + d * (dist(st, t) - abs(l[st] - val));
                 ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rail.cpp:61:21: error: invalid operands of types 'int [5005][5005]' and 'int' to binary 'operator*'
    l[t] = l[st] - d * dist(st, t);
                   ~~^~~~~~~~~~~~~
In file included from /usr/include/c++/7/bits/stl_algobase.h:71:0,
                 from /usr/include/c++/7/bits/char_traits.h:39,
                 from /usr/include/c++/7/ios:40,
                 from /usr/include/c++/7/istream:38,
                 from /usr/include/c++/7/sstream:38,
                 from /usr/include/c++/7/complex:45,
                 from /usr/include/c++/7/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:52,
                 from rail.cpp:2:
/usr/include/c++/7/bits/predefined_ops.h: In instantiation of 'bool __gnu_cxx::__ops::_Iter_comp_iter<_Compare>::operator()(_Iterator1, _Iterator2) [with _Iterator1 = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Iterator2 = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)>]':
/usr/include/c++/7/bits/stl_algo.h:1847:14:   required from 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_algo.h:1885:25:   required from 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_algo.h:1971:31:   required from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_algo.h:4868:18:   required from 'void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)>]'
rail.cpp:48:3:   required from here
/usr/include/c++/7/bits/predefined_ops.h:143:18: error: void value not ignored as it ought to be
         { return bool(_M_comp(*__it1, *__it2)); }
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/7/bits/predefined_ops.h: In instantiation of 'bool __gnu_cxx::__ops::_Val_comp_iter<_Compare>::operator()(_Value&, _Iterator) [with _Value = int; _Iterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)>]':
/usr/include/c++/7/bits/stl_algo.h:1828:20:   required from 'void std::__unguarded_linear_insert(_RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Val_comp_iter<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_algo.h:1855:36:   required from 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_algo.h:1885:25:   required from 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_algo.h:1971:31:   required from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_algo.h:4868:18:   required from 'void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)>]'
rail.cpp:48:3:   required from here
/usr/include/c++/7/bits/predefined_ops.h:215:11: error: void value not ignored as it ought to be
  { return bool(_M_comp(__val, *__it)); }
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/7/bits/predefined_ops.h: In instantiation of 'bool __gnu_cxx::__ops::_Iter_comp_val<_Compare>::operator()(_Iterator, _Value&) [with _Iterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Value = int; _Compare = solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)>]':
/usr/include/c++/7/bits/stl_heap.h:133:48:   required from 'void std::__push_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare&) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Distance = long int; _Tp = int; _Compare = __gnu_cxx::__ops::_Iter_comp_val<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_heap.h:237:23:   required from 'void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Distance = long int; _Tp = int; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_heap.h:342:22:   required from 'void std::__make_heap(_RandomAccessIterator, _RandomAccessIterator, _Compare&) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_algo.h:1672:23:   required from 'void std::__heap_select(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_algo.h:1933:25:   required from 'void std::__partial_sort(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_algo.h:1948:27:   required from 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Size = long int; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_algo.h:1968:25:   required from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)> >]'
/usr/include/c++/7/bits/stl_algo.h:4868:18:   required from 'void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = solve(int*, int*, std::vector<int>&, int, int)::<lambda(int, int)>]'
rail.cpp:48:3:   required from here
/usr/include/c++/7/bits/predefined_ops.h:177:11: error: void value not ignored as it ought to be
  { return bool(_M_comp(*__it, __val)); }
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~