Submission #61181


Source Code Expand

#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <functional>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <string>
#include <vector>

using namespace std;

#define reps(i,f,n) for(int i=f; i<int(n); ++i)
#define rep(i,n) reps(i,0,n)
#define debug(x) cerr<<#x<<" = "<<(x)<<endl;

typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int,int> pii;

const int INF = 1001001001;

struct Data
{
	int y, x, dir, next, cost;
	Data(int y, int x, int dir, int next, int cost) : y(y),x(x),dir(dir),next(next),cost(cost){}
	bool operator< (const Data& d)const {
		return cost > d.cost;
	}
};

bool visited[101][101][110][4];
pii memo[100][100][26][4];
int main()
{
	int h, w, l;
	scanf("%d%d%d", &h, &w, &l);
	
	char str[128];
	scanf("%s", str);
	
	char board[128][128];
	rep(i, h)
		scanf("%s", board[i]);
	
	rep(i, 100) rep(j, 100) rep(k, 26) rep(l, 4)
		memo[i][j][k][l].first = -1;

	rep(i, h) rep(j, w){
		rep(k, 4){
			const int dy[] = {-1, 0, 0, 1};
			const int dx[] = {0, 1, -1, 0};
			int py = i, px = j;
			for(;;){
				py += dy[k];
				px += dx[k];
				if(py<0 || h<=py || px<0 || w<=px)
					break;
				
				int c = board[py][px] - 'a';
				if(memo[i][j][c][k].first == -1){
					memo[i][j][c][k] = pii(py, px);
				}
			}
		}
	}
	
	priority_queue<Data> Q;
	rep(i, h) rep(j, w){
		Q.push(Data(i, j, -1, 0, 0));
	}

	int ans = INF;
	while(!Q.empty()){
		Data d = Q.top();
		Q.pop();
		if(visited[d.y][d.x][d.next][d.dir])
			continue;
		visited[d.y][d.x][d.next][d.dir] = true;
		
		rep(i, 4){
			if(d.dir == i) continue;
			pii next = memo[d.y][d.x][str[d.next]-'a'][i];
			if(next.first == -1)
				continue;
			int nextcost = d.cost + abs(d.y-next.first) + abs(d.x-next.second);
			if(d.next+1 == l)
				ans = min(ans, nextcost);
			else
				Q.push(Data(next.first, next.second, i, d.next+1, nextcost));
		}
	}
	printf("%d\n", ans==INF ? -1 : ans);

	return 0;
}

Submission Info

Submission Time
Task F - 僕は宇宙人
User natrium
Language C++ (G++ 4.6.4)
Score 100
Code Size 2139 Byte
Status AC
Exec Time 152 ms
Memory 14256 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:44:29: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
./Main.cpp:47:18: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
./Main.cpp:51: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 100 / 100
Status
AC × 55
Set Name Test Cases
All case_000.txt, case_001.txt, case_002.txt, case_003.txt, case_004.txt, case_005.txt, case_006.txt, case_007.txt, case_008.txt, case_009.txt, case_010.txt, case_011.txt, case_012.txt, case_013.txt, case_014.txt, case_015.txt, case_016.txt, case_017.txt, case_018.txt, case_019.txt, case_020.txt, case_021.txt, case_022.txt, case_023.txt, case_024.txt, case_025.txt, case_026.txt, case_027.txt, case_028.txt, case_029.txt, case_030.txt, case_031.txt, case_032.txt, case_033.txt, case_034.txt, case_035.txt, case_036.txt, case_037.txt, case_038.txt, case_039.txt, case_040.txt, case_041.txt, case_042.txt, case_043.txt, case_044.txt, case_045.txt, case_046.txt, case_047.txt, case_048.txt, case_049.txt, case_050.txt, case_051.txt, case_052.txt, case_053.txt, case_054.txt
Case Name Status Exec Time Memory
case_000.txt AC 36 ms 8764 KB
case_001.txt AC 36 ms 8760 KB
case_002.txt AC 36 ms 8772 KB
case_003.txt AC 36 ms 8888 KB
case_004.txt AC 36 ms 8880 KB
case_005.txt AC 36 ms 8888 KB
case_006.txt AC 37 ms 8888 KB
case_007.txt AC 36 ms 8772 KB
case_008.txt AC 36 ms 8884 KB
case_009.txt AC 37 ms 8884 KB
case_010.txt AC 37 ms 8888 KB
case_011.txt AC 37 ms 9016 KB
case_012.txt AC 36 ms 8876 KB
case_013.txt AC 146 ms 14256 KB
case_014.txt AC 152 ms 14252 KB
case_015.txt AC 79 ms 12400 KB
case_016.txt AC 54 ms 11116 KB
case_017.txt AC 59 ms 11500 KB
case_018.txt AC 43 ms 9772 KB
case_019.txt AC 59 ms 10864 KB
case_020.txt AC 40 ms 9524 KB
case_021.txt AC 41 ms 9652 KB
case_022.txt AC 45 ms 10256 KB
case_023.txt AC 45 ms 10132 KB
case_024.txt AC 60 ms 11636 KB
case_025.txt AC 37 ms 9020 KB
case_026.txt AC 48 ms 10520 KB
case_027.txt AC 39 ms 9392 KB
case_028.txt AC 38 ms 9392 KB
case_029.txt AC 45 ms 10264 KB
case_030.txt AC 82 ms 13316 KB
case_031.txt AC 58 ms 11120 KB
case_032.txt AC 46 ms 10268 KB
case_033.txt AC 45 ms 10264 KB
case_034.txt AC 38 ms 8988 KB
case_035.txt AC 68 ms 11888 KB
case_036.txt AC 37 ms 9280 KB
case_037.txt AC 48 ms 10388 KB
case_038.txt AC 42 ms 9784 KB
case_039.txt AC 72 ms 13232 KB
case_040.txt AC 89 ms 12844 KB
case_041.txt AC 55 ms 11028 KB
case_042.txt AC 38 ms 9144 KB
case_043.txt AC 42 ms 9784 KB
case_044.txt AC 37 ms 9156 KB
case_045.txt AC 40 ms 9528 KB
case_046.txt AC 38 ms 9144 KB
case_047.txt AC 72 ms 11508 KB
case_048.txt AC 83 ms 11116 KB
case_049.txt AC 38 ms 9136 KB
case_050.txt AC 57 ms 11128 KB
case_051.txt AC 39 ms 9372 KB
case_052.txt AC 59 ms 11240 KB
case_053.txt AC 40 ms 9400 KB
case_054.txt AC 40 ms 9528 KB