Submission #58349

#TimeUsernameProblemLanguageResultExecution timeMemory
58349BenqAnts (IZhO12_ants)C++14
100 / 100
4 ms708 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/tree_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef long double ld; typedef complex<ld> cd; typedef pair<int, int> pi; typedef pair<ll,ll> pl; typedef pair<ld,ld> pd; typedef vector<int> vi; typedef vector<ld> vd; typedef vector<ll> vl; typedef vector<pi> vpi; typedef vector<pl> vpl; typedef vector<cd> vcd; template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>; #define FOR(i, a, b) for (int i=a; i<(b); i++) #define F0R(i, a) for (int i=0; i<(a); i++) #define FORd(i,a,b) for (int i = (b)-1; i >= a; i--) #define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--) #define sz(x) (int)(x).size() #define mp make_pair #define pb push_back #define f first #define s second #define lb lower_bound #define ub upper_bound #define all(x) x.begin(), x.end() const int MOD = 1000000007; const ll INF = 1e18; const int MX = 100001; int W,H,K,T; vector<array<int,3>> hori[100], vert[100]; array<int,3> ans[100]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> W >> H >> K >> T; F0R(i,K) { int X,Y,D; cin >> X >> Y >> D; if (D == 1) hori[Y].pb({X,1,i}); else if (D == 3) hori[Y].pb({X,-1,i}); else if (D == 2) vert[X].pb({Y,1,i}); else vert[X].pb({Y,-1,i}); } F0R(i,H) { int t = T%(2*W); vpi tmp; sort(all(hori[i])); for (auto& a: hori[i]) { if (a[1] == 1) { a[0] += t; if (a[0] >= W) { a[0] = 2*W-a[0]; a[1] *= -1; } if (a[0] <= 0) { a[0] = -a[0]; a[1] *= -1; } } else { a[0] -= t; if (a[0] <= 0) { a[0] = -a[0]; a[1] *= -1; } if (a[0] >= W) { a[0] = 2*W-a[0]; a[1] *= -1; } } tmp.pb({a[0],a[1]}); } sort(all(tmp)); F0R(j,sz(tmp)) ans[hori[i][j][2]] = {tmp[j].f,i,tmp[j].s == 1 ? 1 : 3}; } F0R(j,W) { int t = T%(2*H); vpi tmp; sort(all(vert[j])); for (auto& a: vert[j]) { if (a[1] == 1) { a[0] += t; if (a[0] >= H) { a[0] = 2*H-a[0]; a[1] *= -1; } if (a[0] <= 0) { a[0] = -a[0]; a[1] *= -1; } } else { a[0] -= t; if (a[0] <= 0) { a[0] = -a[0]; a[1] *= -1; } if (a[0] >= H) { a[0] = 2*H-a[0]; a[1] *= -1; } } tmp.pb({a[0],a[1]}); } sort(all(tmp)); F0R(i,sz(tmp)) ans[vert[j][i][2]] = {j,tmp[i].f,tmp[i].s == 1 ? 2 : 4}; } F0R(i,K) { F0R(j,3) cout << ans[i][j] << " "; cout << "\n"; } } /* Look for: * the exact constraints (multiple sets are too slow for n=10^6 :( ) * special cases (n=1?) * overflow (ll vs int?) * array bounds */
#Verdict Execution timeMemoryGrader output
Fetching results...