Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin("pulsar.in");
- ofstream fout("pulsar.out");
- int dx[] = {-1, 1, 0 ,0, 0};
- int dy[] = {0, 0, -1, 1, 0};
- int a[65][505][505];
- int dist[65][505][505];
- bool viz[65][505][505];
- long long cer, n, p, xs, ys, xf, yf, cmmmc = 1, r;
- struct pulsari {
- long long x, y, r, t;
- }v[15005];
- struct pulsari1 {
- long long x, y, stare;
- };
- int lcm(int a, int b) {
- return a * b / __gcd(a, b);
- }
- int manhattandist(int xc, int yc, int xstart, int ystart) {
- return abs(xc - xstart) + abs(yc - ystart);
- }
- bool verif(int a, int b) {
- return a >= 1 && a <= n && b >= 1 && b <= n;
- }
- void fillM(int xc, int yc, int raza, int stare, int xstart, int ystart) {
- a[stare][xc][yc] = 1;
- if(manhattandist(xc, yc, xstart, ystart) == r) {
- return;
- }
- for(int k = 0; k <= 4; k++) {
- int xNou = xc + dx[k];
- int yNou = yc + dy[k];
- if(verif(xNou, yNou) && manhattandist(xc, yc, xstart, ystart) < manhattandist(xstart, ystart, xNou, yNou)) {
- fillM(xNou, yNou, raza, stare, xstart, ystart);
- }
- }
- }
- int main() {
- fin >> cer >> n >> p;
- for(int i = 1; i <= p; i++) {
- fin >> v[i].x >> v[i].y >> v[i].r >> v[i].t;
- cmmmc = lcm(cmmmc, v[i].r);
- }
- fin >> xs >> ys >> xf >> yf;
- for(int i = 0; i <= cmmmc-1; i++) {
- for(int j = 1; j <= p; j++) {
- r = (i + v[j].t) % v[j].r;
- fillM(v[j].x, v[j].y, r, i, v[j].x, v[j].y);
- }
- }
- if(cer == 1) {
- int mx = INT_MIN;
- for(int i = 0; i < cmmmc; i++) {
- int nr = 0;
- for(int j = 1; j <= n; j++) {
- for(int k = 1; k <= n; k++) {
- if(a[i][j][k] == 1) {
- nr++;
- }
- }
- }
- mx = max(nr, mx);
- }
- fout << mx;
- }
- if(cer == 2) {
- for(int i=0; i<60; i++) {
- for (int j = 1; j <= n; j++) {
- for (int k = 1; k <= n; k++) {
- dist[i][j][k] = 1e9;
- }
- }
- }
- queue<pulsari1> q;
- q.push({xs, ys, 0});
- dist[0][xs][ys] = 1;
- viz[0][xs][ys] = true;
- while(!q.empty()) {
- pulsari1 now = q.front();
- q.pop();
- for(int k = 0; k <= 4; k++) {
- pulsari1 nxt;
- nxt.x = now.x + dx[k];
- nxt.y = now.y + dy[k];
- nxt.stare = (now.stare + 1) % cmmmc;
- if(verif(nxt.x, nxt.y) && a[nxt.stare][nxt.x][nxt.y] != 1 && !viz[nxt.stare][nxt.x][nxt.y]) {
- q.emplace(nxt);
- dist[nxt.stare][nxt.x][nxt.y] = dist[now.stare][now.x][now.y] + 1;
- viz[nxt.stare][nxt.x][nxt.y] = true;
- }
- }
- }
- int mn = 1e9;
- for(int i = 0; i < cmmmc; i++) {
- mn = min(mn, dist[i][xf][yf]);
- }
- fout << mn-1;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement