結果

問題 No.340 雪の足跡
ユーザー face4
提出日時 2019-12-15 19:31:45
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 403 ms / 1,000 ms
コード長 2,248 bytes
コンパイル時間 822 ms
コンパイル使用メモリ 76,064 KB
実行使用メモリ 15,360 KB
最終ジャッジ日時 2024-07-02 18:19:45
合計ジャッジ時間 6,365 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 5
other AC * 32
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int di[8] = {0,0,1,-1,1,1,-1,-1};
int dj[8] = {1,-1,0,0,1,-1,1,-1};
#define inRange(x,a,b) (a <= x && x < b)
int yoko[1001][1001] = {}, tate[1001][1001] = {}, dp[1001][1001];
void no(){
cout << "Odekakedekinai.." << endl;
exit(0);
}
int main(){
int w, h, n;
cin >> w >> h >> n;
while(n--){
int m; cin >> m;
int x; cin >> x;
while(m--){
int y; cin >> y;
int i = x/w, j = x%w, ni = y/w, nj = y%w;
if(i == ni){
if(j > nj) swap(j, nj);
yoko[i][j]++;
yoko[i][nj]--;
}else if(j == nj){
if(i > ni) swap(i, ni);
tate[i][j]++;
tate[ni][j]--;
}
x = y;
}
}
for(int i = 0; i < h; i++){
for(int j = 1; j < w; j++){
yoko[i][j] += yoko[i][j-1];
}
}
for(int j = 0; j < w; j++){
for(int i = 1; i < h; i++){
tate[i][j] += tate[i-1][j];
}
}
// :(
if(h==1&&w==1){
cout << 0 << endl;
return 0;
}
if(tate[0][0]==0&&yoko[0][0]==0){
no();
}
memset(dp, 0x3f, sizeof(dp));
// for(int i = 0; i < h; i++){
// for(int j = 0; j < w; j++){
// cout << tate[i][j] << " \n"[j==w-1];
// }
// }
dp[0][0] = 0;
queue<int> q;
q.push(0);
while(!q.empty()){
int x = q.front(); q.pop();
int i = x/w, j = x%w;
if(i != 0 && dp[i-1][j] > dp[i][j]+1 && tate[i-1][j]>0){
dp[i-1][j] = dp[i][j]+1;
q.push((i-1)*w+j);
}
if(i != h-1 && dp[i+1][j] > dp[i][j]+1 && tate[i][j]>0){
dp[i+1][j] = dp[i][j]+1;
q.push((i+1)*w+j);
}
if(j != 0 && dp[i][j-1] > dp[i][j]+1 && yoko[i][j-1]>0){
dp[i][j-1] = dp[i][j]+1;
q.push(i*w+(j-1));
}
if(j != w-1 && dp[i][j+1] > dp[i][j]+1 && yoko[i][j]>0){
dp[i][j+1] = dp[i][j]+1;
q.push(i*w+(j+1));
}
}
if(dp[h-1][w-1]>1e9) no();
else cout << dp[h-1][w-1] << endl;
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0