結果
| 問題 |
No.340 雪の足跡
|
| コンテスト | |
| ユーザー |
rickytheta
|
| 提出日時 | 2016-01-29 22:57:10 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,945 bytes |
| コンパイル時間 | 1,484 ms |
| コンパイル使用メモリ | 165,112 KB |
| 実行使用メモリ | 606,020 KB |
| 最終ジャッジ日時 | 2024-09-21 18:29:39 |
| 合計ジャッジ時間 | 4,678 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 2 WA * 1 MLE * 1 -- * 28 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef complex<double> P;
typedef pair<int,int> pii;
#define REP(i,n) for(ll i=0;i<n;++i)
#define REPR(i,n) for(ll i=1;i<n;++i)
#define FOR(i,a,b) for(ll i=a;i<b;++i)
#define DEBUG(x) cout<<#x<<": "<<x<<endl
#define DEBUG_VEC(v) cout<<#v<<":";REP(i,v.size())cout<<" "<<v[i];cout<<endl
#define ALL(a) (a).begin(),(a).end()
#define MOD (ll)(1e9+7)
#define ADD(a,b) a=((a)+(b))%MOD
#define FIX(a) ((a)%MOD+MOD)%MOD
#define V_MAX 100010
#define INF 100000000
int g[V_MAX];
// right, up, left, down
int dir[4] = {1,2,4,8};
int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};
int w,h;
void add_edge(int src,int dst){
if(src>dst)swap(src,dst);
int sx,sy,tx,ty;
sx = src%w;
sy = src/w;
tx = dst%w;
ty = dst/w;
if(sx==tx){
FOR(i,sy,ty){
g[sx+i*w] |= dir[1];
g[sx+(i+1)*w] |= dir[3];
}
}else{
FOR(i,sx,tx){
g[sy*w+i] |= dir[0];
g[sy*w+i+1] |= dir[2];
}
}
}
int main(){
// w,h<1e3
// |V| = wh < 1e6
// n < 1e3
// m < 1e3
// |E| = nm < 1e6
int n;
cin>>w>>h>>n;
while(n--){
int m;
cin>>m;
int bef;
cin>>bef;
REP(i,m){
int cur;
cin>>cur;
add_edge(bef,cur);
bef = cur;
}
}
queue<pii> Q;
int s = 0;
int t = w*h-1;
Q.push(make_pair(0,0));
int res = -1;
vector<bool> used(w*h,false);
used[s] = true;
while(!Q.empty()){
pii P = Q.front(); Q.pop();
int pos = P.first;
int wei = P.second;
int x = pos%w;
int y = pos/w;
REP(i,4){
if(!(g[pos] & dir[i]))continue;
int tx = x+dx[i];
int ty = y+dy[i];
int tpos = ty*w+tx;
if(tpos<0 || tpos>=w*h)continue;
if(used[tpos])continue;
if(tpos == t){
cout<<(wei+1)<<endl;
return 0;
}
Q.push(make_pair(tpos,wei+1));
}
}
cout<<"Odekakedekinai.."<<endl;
return 0;
}
rickytheta