Submission #212928

#TimeUsernameProblemLanguageResultExecution timeMemory
212928BlerarghTower Defense (CEOI19_towerdefense)C++17
100 / 100
6 ms512 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<ll,ll> ii; typedef pair<ld,ld> id; #define FOR(i, a, b) for(int i=(a); i<=(b); i++) #define ROF(i, a, b) for(int i=(a); i>=(b); i--) #define MEM(x, v) memset(x, v, sizeof(x)) #define FILL(x, n, v) fill(x, x+n, v); #define ALL(x) x.begin(), x.end() #define SORT(x) sort((x).begin(), (x).end()) #define CMPSORT(x, cp) sort((x).begin(), (x).end(), cp) #define FAST ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #define f first #define s second #define ins insert #define e emplace #define eb emplace_back #define ef emplace_front #define p push #define pf push_front #define pb push_back #define mp make_pair #define ub upper_bound #define lb lower_bound #define ft front #define bk back #define pp pop #define ppb pop_back #define ppf pop_front #define db cout<<"YEET\n"; #define ct(x) cout<<x<<'\n'; const ll MOD = 1e9+7; //998244353 const ll MAXN = 2e5+5; const ll INF = 1e18; const ld PI = acos((ld)-1); int main(){ FAST ll sx, sy, ex, ey; cin >> sx >> sy >> ex >> ey; ll d; cin >> d; ll dist = abs(ey-sy) + abs(ex-sx); bool left; if (sx <= ex) left=1; else left=0; vector<ii> ans; if (dist > d || (d-dist)&1){ cout << "impossible"; return 0; } else if (abs(ex-sx)==1 && abs(ey-sy)==1) { if (d<=5 && d>=3){ cout << "impossible"; return 0; } else if (d!=2) { ll border = (d-6)/2; if (left) { ans.eb(sx+1,sy); ans.eb(sx,sy+1); ans.eb(sx,sy-1); FOR(i,1,border){ ans.eb(sx-i,sy+1); ans.eb(sx-i,sy-1); } } else { ans.eb(sx-1,sy); ans.eb(sx,sy+1); ans.eb(sx,sy-1); FOR(i,1,border){ ans.eb(sx+i,sy+1); ans.eb(sx+i,sy-1); } } } } else if (dist==1){ if (d!=1) { cout << "impossible"; return 0; } } else if (abs(ey-sy)<=1){ ll border = (d-dist)/2 - 1; if (border!=-1){ if (left){ ans.eb(sx+1,sy); FOR(i,1,border){ ans.eb(sx+1,sy+i); ans.eb(sx+1,sy-i); } if (abs(ey-sy)==1) { ans.eb(sx+1,sy+border+1); ans.eb(sx+1,sy-border-1); } } else { ans.eb(sx-1,sy); FOR(i,1,border){ ans.eb(sx-1,sy+i); ans.eb(sx-1,sy-i); } if (abs(ey-sy)==1) { ans.eb(sx-1,sy+border+1); ans.eb(sx-1,sy-border-1); } } } } else { ll backtrack = (d-dist)/2; if (left){ ans.eb(sx+1,sy-1); ans.eb(sx+1,sy); ans.eb(sx+1,sy+1); FOR(i,1,backtrack){ ans.eb(sx-i+1, sy+1); ans.eb(sx-i+1, sy-1); } } else { ans.eb(sx-1,sy-1); ans.eb(sx-1,sy); ans.eb(sx-1,sy+1); FOR(i,1,backtrack){ ans.eb(sx+i-1, sy+1); ans.eb(sx+i-1, sy-1); } } } cout << ans.size() << '\n'; for (auto i : ans){ cout << i.f << " " << i.s << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...