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
WA × 3
AC × 1
WA × 2
AC × 1
WA × 9
AC × 1
WA × 13
TLE × 1
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