結果
問題 | No.20 砂漠のオアシス |
ユーザー | mai |
提出日時 | 2016-03-18 21:34:57 |
言語 | C++11 (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,623 bytes |
コンパイル時間 | 695 ms |
コンパイル使用メモリ | 76,112 KB |
実行使用メモリ | 14,080 KB |
最終ジャッジ日時 | 2024-10-13 05:35:03 |
合計ジャッジ時間 | 4,982 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
6,820 KB |
testcase_01 | AC | 2 ms
6,820 KB |
testcase_02 | AC | 1 ms
6,816 KB |
testcase_03 | AC | 4 ms
6,816 KB |
testcase_04 | AC | 16 ms
6,816 KB |
testcase_05 | AC | 10 ms
6,820 KB |
testcase_06 | AC | 22 ms
6,816 KB |
testcase_07 | AC | 2,165 ms
14,080 KB |
testcase_08 | AC | 175 ms
6,816 KB |
testcase_09 | AC | 781 ms
8,576 KB |
testcase_10 | AC | 2 ms
6,816 KB |
testcase_11 | AC | 2 ms
6,820 KB |
testcase_12 | AC | 8 ms
6,820 KB |
testcase_13 | AC | 11 ms
6,816 KB |
testcase_14 | AC | 46 ms
6,820 KB |
testcase_15 | AC | 27 ms
6,816 KB |
testcase_16 | AC | 105 ms
6,820 KB |
testcase_17 | AC | 49 ms
6,824 KB |
testcase_18 | WA | - |
testcase_19 | AC | 91 ms
6,816 KB |
testcase_20 | WA | - |
ソースコード
#include <iostream> #include <algorithm> #include <vector> #include <list> #include <cstdio> #include <cmath> using namespace std; int n,hp,ox,oy; vector<vector<int>> map; int foot[201][201]; int main(){ int i,j,k; cin>>n>>hp>>ox>>oy; map.push_back(vector<int>()); for (i=0;i<n;i++){ map.push_back(vector<int>()); vector<int> &v=map.back(); v.push_back(999); for(j=0;j<n;j++){ cin>>k; v.push_back(k); } } k=0; list<vector<int>> queue; queue.push_back(vector<int>{1,1,hp,0}); for (;!queue.empty();queue.pop_front()){k++; vector<int> &v=queue.front(); if (v[0]==n && v[1]==n){ cout<<"YES"<<endl; return 0; } if (foot[v[0]][v[1]]>=v[2]) continue; foot[v[0]][v[1]]=v[2]; v[2]-=map[v[0]][v[1]]; if (v[2]<=0) continue; if (!v[3] && v[0]==oy && v[1]==ox){ v[3]=1; v[2]*=2; } if (1<v[0]) if (foot[v[0]-1][v[1]]<v[2]) queue.push_back(vector<int>{v[0]-1,v[1],v[2],v[3]}); if (1<v[1]) if (foot[v[0]][v[1]-1]<v[2]) queue.push_back(vector<int>{v[0],v[1]-1,v[2],v[3]}); if (v[0]<n) if (foot[v[0]+1][v[1]]<v[2]) queue.push_back(vector<int>{v[0]+1,v[1],v[2],v[3]}); if (v[1]<n) if (foot[v[0]][v[1]+1]<v[2]) queue.push_back(vector<int>{v[0],v[1]+1,v[2],v[3]}); //queue.sort([](vector<int> &le,vector<int> &re){return le[0]+le[1]>re[0]+re[1];}); } cout<<"NO"<<endl; return 0; }