Submission #314436


Source Code Expand

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <queue> 
#define MX 100005
using namespace std;
typedef pair<int, int> pii;
typedef long long LL;

int X[MX], Y[MX], ny, nx, N;
pii p[MX];
char dir[MX];
LL mark[MX], T;
set <pii> xset[MX], yset[MX];
set <pii> :: iterator  it, it1;
struct Data {
	int u;
	LL t;
	Data(int u = 0, LL t = 0) : u(u), t(t) {}
	
	bool operator <(const Data &b) const {
		return t > b.t;
	}
}D;

int getX(int x) {return lower_bound(X, X + nx, x) - X;}
int getY(int y) {return lower_bound(Y, Y + ny, y) - Y;}
priority_queue <Data> Q;
int main() {
//	freopen("in.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
	
	scanf("%d%lld", &N, &T);
	int i, x, y;
	LL k, rx, ry;
	for (i = 0; i < N; i++) {
		scanf("%d%d", &p[i].first, &p[i].second);
		X[i] = p[i].first, Y[i] = p[i].second;
		scanf("%1s", dir + i);
	}
	sort(X, X + N);
	sort(Y, Y + N);
	nx = unique(X, X + N) - X;
	ny = unique(Y, Y + N) - Y;
	for (i = 0; i < N; i++) {
		x = getX(p[i].first);
		xset[x].insert(pii(p[i].second, i));
		y = getY(p[i].second);
		yset[y].insert(pii(p[i].first, i));
	}
	memset(mark, -1, sizeof mark);
	mark[0] = 0;
	x = getX(p[0].first);
	xset[x].erase(pii(p[0].second, 0));
	y = getY(p[0].second);
	yset[y].erase(pii(p[0].first, 0));
	Q.push(Data(0, 0));
	while (!Q.empty()) {
		D = Q.top();
		Q.pop();
		k = D.u;
		x = p[k].first, y = p[k].second;
		if (dir[k] == 'U') {
			x = getX(x);
			it = xset[x].lower_bound(pii(y, 0));
			it1 = it;
			for (; it != xset[x].end(); it++) {
				mark[it -> second] = D.t + it -> first - y;
				Q.push(Data(it -> second, mark[it -> second]));
				int z = getY(it -> first);
				yset[z].erase(pii(p[k].first, it -> second));
			}
			xset[x].erase(it1, xset[x].end());
		} else if (dir[k] == 'R') {
			y = getY(y);
			it = yset[y].lower_bound(pii(x, 0));
			it1 = it;
			for (; it != yset[y].end(); it++) {
				mark[it -> second] = D.t + it -> first - x;
				Q.push(Data(it -> second, mark[it -> second]));
				int z = getX(it -> first);
				xset[z].erase(pii(p[k].second, it -> second));
			}
			yset[y].erase(it1, yset[y].end());
		} else if (dir[k] == 'D') {
			x = getX(x);
			it1 = xset[x].lower_bound(pii(y, 0));
			for (it = xset[x].begin(); it != it1; it++) {
				mark[it -> second] = D.t + y - it -> first;
				Q.push(Data(it -> second, mark[it -> second]));
				int z = getY(it -> first);
				yset[z].erase(pii(p[k].first, it -> second));
			}
			xset[x].erase(xset[x].begin(), it1);
		} else if (dir[k] == 'L') {
			y = getY(y);
			it1 = yset[y].lower_bound(pii(x, 0));
			for (it = yset[y].begin(); it != it1; it++) {
				mark[it -> second] = D.t + x - it -> first;
				Q.push(Data(it -> second, mark[it -> second]));
				int z = getX(it -> first);
				xset[z].erase(pii(p[k].second, it -> second));
			}
			yset[y].erase(yset[y].begin(), it1);
		}
	}
	for (i = 0; i < N; i++) {
		if (mark[i] == -1 || mark[i] >= T) k = 0;
		else k = T - mark[i];
		rx = p[i].first, ry = p[i].second;
		if (dir[i] == 'U') ry += k;
		else if (dir[i] == 'D') ry -= k;
		else if (dir[i] == 'L') rx -= k;
		else if (dir[i] == 'R') rx += k;
		printf("%lld %lld\n", rx, ry);
	}
	return 0;
}

Submission Info

Submission Time
Task G - ロボット
User kut_kjb1994
Language C++ (G++ 4.6.4)
Score 0
Code Size 3282 Byte
Status WA
Exec Time 419 ms
Memory 24092 KiB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:34:25: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
./Main.cpp:38:43: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
./Main.cpp:40:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]

Judge Result

Set Name All
Score / Max Score 0 / 7
Status
AC × 21
WA × 16
Set Name Test Cases
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt
Case Name Status Exec Time Memory
000.txt AC 49 ms 11680 KiB
001.txt AC 402 ms 24080 KiB
002.txt WA 390 ms 24088 KiB
003.txt AC 311 ms 21912 KiB
004.txt AC 382 ms 24088 KiB
005.txt WA 383 ms 23068 KiB
006.txt WA 402 ms 23068 KiB
007.txt AC 310 ms 21920 KiB
008.txt WA 393 ms 23128 KiB
009.txt WA 410 ms 24092 KiB
010.txt WA 419 ms 24088 KiB
011.txt WA 411 ms 23124 KiB
012.txt AC 376 ms 24080 KiB
013.txt WA 67 ms 12576 KiB
014.txt WA 93 ms 13720 KiB
015.txt WA 361 ms 22160 KiB
016.txt WA 135 ms 15136 KiB
017.txt WA 404 ms 23952 KiB
018.txt WA 411 ms 23064 KiB
019.txt WA 408 ms 23068 KiB
020.txt WA 409 ms 23140 KiB
021.txt WA 397 ms 22560 KiB
022.txt AC 299 ms 21908 KiB
023.txt AC 364 ms 24080 KiB
024.txt AC 367 ms 24084 KiB
025.txt AC 332 ms 23064 KiB
026.txt AC 339 ms 23068 KiB
027.txt AC 306 ms 21920 KiB
028.txt AC 307 ms 21988 KiB
029.txt AC 314 ms 21924 KiB
030.txt AC 309 ms 21924 KiB
031.txt AC 292 ms 24080 KiB
032.txt AC 367 ms 24080 KiB
033.txt AC 369 ms 24080 KiB
034.txt AC 302 ms 21920 KiB
035.txt AC 369 ms 24084 KiB
036.txt AC 376 ms 24080 KiB