이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int N = 150007;
const long long INF = (1e18) + 7;
int n,q;
pair < int, int > save[N];
bool have[N][2];
long long dist[N][2];
int sz;
inline long long get_dist(pair < int, int > a, pair < int, int > b) {
return ((a.first-b.first)*1ll*(a.first-b.first) + (a.second-b.second)*1ll*(a.second-b.second));
}
inline pair < int, int > enter() {
if(sz==0) {
return make_pair(1,0);
}
int i,j;
int last0,last1;
long long max_dist=-INF;
for(i=1;i<=n;i++) {
for(j=0;j<2;j++) {
dist[i][j]=INF;
}
}
last0=0;
last1=0;
for(i=1;i<=n;i++) {
for(j=0;j<2;j++) if(!have[i][j]) {
if(last0!=0) dist[i][j]=min(dist[i][j],get_dist(make_pair(i,j),make_pair(last0,0)));
if(last1!=0) dist[i][j]=min(dist[i][j],get_dist(make_pair(i,j),make_pair(last1,1)));
if(have[i][1-j]) dist[i][j]=1;
}
if(have[i][0]) last0=i;
if(have[i][1]) last1=i;
}
last0=0;
last1=0;
for(i=n;i>=1;i--) {
for(j=0;j<2;j++) if(!have[i][j]) {
if(last0!=0) dist[i][j]=min(dist[i][j],get_dist(make_pair(i,j),make_pair(last0,0)));
if(last1!=0) dist[i][j]=min(dist[i][j],get_dist(make_pair(i,j),make_pair(last1,1)));
max_dist=max(max_dist,dist[i][j]);
}
if(have[i][0]) last0=i;
if(have[i][1]) last1=i;
}
for(i=1;i<=n;i++) {
for(j=0;j<2;j++) if(!have[i][j]) {
if(max_dist==dist[i][j]) {
return make_pair(i,j);
}
}
}
}
int main() {
int i,x;
char type[4];
scanf("%d %d", &n, &q);
for(i=1;i<=q;i++) {
scanf("%s", type);
if(type[0]=='E') {
save[i]=enter();
have[save[i].first][save[i].second]=true;
printf("%d %d\n", save[i].first, save[i].second+1);
++sz;
}
else {
scanf("%d", &x);
have[save[x].first][save[x].second]=false;
--sz;
}
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
tram.cpp: In function 'int main()':
tram.cpp:70:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
70 | scanf("%d %d", &n, &q);
| ~~~~~^~~~~~~~~~~~~~~~~
tram.cpp:72:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
72 | scanf("%s", type);
| ~~~~~^~~~~~~~~~~~
tram.cpp:80:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
80 | scanf("%d", &x);
| ~~~~~^~~~~~~~~~
tram.cpp: In function 'std::pair<int, int> enter()':
tram.cpp:64:1: warning: control reaches end of non-void function [-Wreturn-type]
64 | }
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |