結果
| 問題 | No.1577 織姫と彦星2 |
| ユーザー |
|
| 提出日時 | 2026-10-29 17:34:52 |
| 言語 | C++23(gcc16) (gcc 16.2.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 75 ms / 2,000 ms |
| + 645µs | |
| コード長 | 1,167 bytes |
| 記録 | |
| コンパイル時間 | 3,758 ms |
| コンパイル使用メモリ | 210,668 KB |
| 実行使用メモリ | 9,924 KB |
| 最終ジャッジ日時 | 2026-10-29 17:35:05 |
| 合計ジャッジ時間 | 9,085 ms |
|
ジャッジサーバーID (参考情報) |
judge5_0 / judge7_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 53 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <queue>
using namespace std;
using pii = pair<int, int>;
bool cmp(const pii& p, int key){
return p.first<key;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N; cin>>N;
int st, en; cin>>st>>en;
vector<pii> vertex = {{st, 0}, {en, 1}};
vector<int> stones(N+2);
stones[0]=st, stones[1]=en;
for (int i=2;i<N+2;i++){
int stone; cin>>stone;
stones[i]=stone;
vertex.push_back({stone, i});
}
sort(vertex.begin(), vertex.end());
vector<int> D(N+2, -1);
D[0]=0;
queue<int> Q;
Q.push(0);
while(! Q.empty()){
int cur = Q.front();
Q.pop();
for (int i=0;i<30;i++){
int next = stones[cur] ^ (1<<i);
auto it = lower_bound(vertex.begin(), vertex.end(), next, cmp);
if (it != vertex.end() && it->first==next){
if (D[it->second]!=-1) continue;
D[it->second] = D[cur]+1;
Q.push(it->second);
}
}
}
cout << (D[1]!=-1 ? D[1]-1 : -1) << "\n";
return 0;
}