Submission #1293608
Source Code Expand
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<vector>
#include<map>
#include<queue>
#include<algorithm>
using namespace std;
using ll=long long;
using vi=vector<int>;
using vvi=vector<vi>;
using pii=pair<int,int>;
struct q_t
{
int idx;
ll cost;
bool operator<(const q_t& rhs) const
{
return cost>rhs.cost;
}
};
priority_queue<q_t> que;
void push(q_t q)
{
que.push(q);
}
int pop(q_t& q)
{
if(que.empty()) return 0;
q=que.top();
que.pop();
return 1;
}
struct vert_t
{
int x, y;
int dir, distance;
int dir_cost;
ll cost;
};
int h, w, f;
int calc_dir(int x, int y)
{
if(x>0) return 'E';
if(x<0) return 'W';
if(y>0) return 'S';
return 'N';
}
int rev_dir(int dir)
{
switch(dir)
{
case 'N': return 'S';
case 'S': return 'N';
case 'E': return 'W';
case 'W': return 'E';
}
return '-';
}
int min_u(ll& m, ll v)
{
if(m<0 || m>v)
{
m=v;
return 1;
}
return 0;
}
int min_cmp(ll a, ll b)
{
if(a<0) return 0;
return a<b;
}
ll calc(vert_t& v, int x, int y)
{
ll ret;
int dx, dy, ndir;
dx=x-v.x;
dy=y-v.y;
ndir=calc_dir(dx, dy);
if(v.dir==ndir)
{
ret=(ll)abs(abs(dx)+abs(dy)-v.distance)*f;
}
else
{
ret=(ll)abs(abs(dx)+abs(dy)-v.distance)*f+v.dir_cost;
if(rev_dir(v.dir)==ndir)
{
min_u(ret, (ll)abs(abs(dx)+abs(dy)+v.distance)*f);
}
}
return ret;
}
void solve_i(vector<vert_t>& v, vvi& vw, vector<vector<pair<int,ll> > >& node)
{
for(int x=vw.size()-1;x>0;x--)
{
int s=vw[x].size();
for(int i=0;i<s;i++)
{
int vwi=vw[x][i];
for(int j=i+1;j<s;j++)
{
int vwj=vw[x][j];
node[vwi].push_back(make_pair(vwj, calc(v[vwi], v[vwj].x, v[vwj].y)));
node[vwj].push_back(make_pair(vwi, calc(v[vwj], v[vwi].x, v[vwi].y)));
}
}
}
}
int solve(vector<vert_t>& v, int s_idx, int g_idx)
{
vector<vector<pair<int,ll> > > node;
vvi vw, vh;
int n=v.size();
q_t q;
if(s_idx<0) return 0;
node.resize(n);
vw.resize(w+1);
vh.resize(h+1);
for(int i=0;i<n;i++)
{
vw[v[i].x].push_back(i);
vh[v[i].y].push_back(i);
}
solve_i(v, vw, node);
solve_i(v, vh, node);
printf("-1\n");
exit(0);
for(;pop(q);)
;
push((q_t){s_idx, 0});
for(;pop(q);)
{
if(!min_u(v[q.idx].cost, q.cost)) continue;
if(min_cmp(v[g_idx].cost, q.cost)) break;
for(auto& ne:node[q.idx])
{
q_t nq={ne.first, ne.second+q.cost};
if(!min_cmp(v[nq.idx].cost, nq.cost))
{
push(nq);
}
}
}
return 1;
}
int main(void)
{
int n, sx, sy, gx, gy, s_idx, g_idx;
vector<vert_t> v;
while(scanf("%d%d%d%d%d%d%d%d", &h, &w, &n, &f, &sy, &sx, &gy, &gx)==8)
{
s_idx=-1;
g_idx=-1;
v.clear();
v.resize(n);
for(int i=0;i<n;i++)
{
int a, b, d, e;
char c[1+1];
scanf("%d%d%1s%d%d", &a, &b, c, &d, &e);
if(b==gx && a==gy)
{
g_idx=i;
}
if(b==sx && a==sy)
{
s_idx=i;
}
v[i]=(vert_t){b, a, c[0], d, e, -1};
}
if(g_idx<0)
{
g_idx=v.size();
v.push_back((vert_t){gx, gy, 'N', 1, 1, -1});
}
solve(v, s_idx, g_idx);
printf("%lld\n", v[g_idx].cost);
}
return 0;
}
Submission Info
Submission Time |
|
Task |
F - Find the Route! |
User |
myanta |
Language |
C++14 (GCC 5.4.1) |
Score |
0 |
Code Size |
3261 Byte |
Status |
WA |
Exec Time |
2168 ms |
Memory |
1004404 KB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:203:43: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%1s%d%d", &a, &b, c, &d, &e);
^
Judge Result
Set Name |
Subtask1 |
Subtask2 |
Subtask3 |
Subtask4 |
Score / Max Score |
0 / 190 |
0 / 170 |
0 / 360 |
0 / 430 |
Status |
|
|
|
|
Set Name |
Test Cases |
Subtask1 |
sub1_in1.txt, sub1_in2.txt, sub1_in3.txt |
Subtask2 |
sub2_in1.txt, sub2_in2.txt, sub2_in3.txt |
Subtask3 |
sub1_in1.txt, sub1_in2.txt, sub1_in3.txt, sub2_in1.txt, sub2_in2.txt, sub2_in3.txt, sub3_in1.txt, sub3_in2.txt, sub3_in3.txt, sub3_in4.txt |
Subtask4 |
sub1_in1.txt, sub1_in2.txt, sub1_in3.txt, sub2_in1.txt, sub2_in2.txt, sub2_in3.txt, sub3_in1.txt, sub3_in2.txt, sub3_in3.txt, sub3_in4.txt, sub4_in1.txt, sub4_in2.txt, sub4_in3.txt, sub4_in4.txt, sub4_in5.txt |
Case Name |
Status |
Exec Time |
Memory |
sub1_in1.txt |
WA |
1 ms |
256 KB |
sub1_in2.txt |
WA |
2 ms |
896 KB |
sub1_in3.txt |
WA |
2 ms |
1024 KB |
sub2_in1.txt |
AC |
1 ms |
256 KB |
sub2_in2.txt |
WA |
2 ms |
512 KB |
sub2_in3.txt |
WA |
5 ms |
2304 KB |
sub3_in1.txt |
WA |
2 ms |
640 KB |
sub3_in2.txt |
WA |
441 ms |
253568 KB |
sub3_in3.txt |
WA |
433 ms |
260864 KB |
sub3_in4.txt |
WA |
530 ms |
316020 KB |
sub4_in1.txt |
WA |
34 ms |
8604 KB |
sub4_in2.txt |
WA |
78 ms |
25004 KB |
sub4_in3.txt |
WA |
58 ms |
15020 KB |
sub4_in4.txt |
WA |
55 ms |
15220 KB |
sub4_in5.txt |
TLE |
2168 ms |
1004404 KB |