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
2015-01-04 17:40:25+0900
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
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