結果
| 問題 |
No.1257 変わった平均値
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-10-16 23:11:20 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 5,710 bytes |
| コンパイル時間 | 1,644 ms |
| コンパイル使用メモリ | 124,944 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-20 23:40:28 |
| 合計ジャッジ時間 | 2,386 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 25 |
ソースコード
#include<iostream>
#include<string>
#include<iomanip>
#include<cmath>
#include<vector>
#include<algorithm>
#include<utility>
#include<queue>
#include<map>
using namespace std;
#define int long long
#define endl "\n"
constexpr long long INF = (long long)1e18;
constexpr long long MOD = 1'000'000'007;
// struct fast_io {
// fast_io(){
// std::cin.tie(nullptr);
// std::ios::sync_with_stdio(false);
// };
// } fio;
#define a first.first
#define b first.second
#define c second.first
#define z second.second
int A, B, C, D, E, F;
vector<pair<int, char>> ans;
void dijkstra(){
// priority_queue<pair<int,pair<int,int>,pair<int,int>>>,vector<pair<int,pair<int,int>,pair<int,int>>>>,greater<pair<int,pair<int,int>,pair<int,int>>>>> q;
// priority_queue<pair<int,pair<int,int>,pair<int,int>>>,vector<pair<int,pair<int,int>,pair<int,int>>>>,greater<pair<int,pair<int,int>,pair<int,int>>>>>> q;
// priority_queue<pair<int,pair<pair<int,int>,pair<int,int>>>>,vector<pair<int,pair<pair<int,int>,pair<int,int>>>>,greater<pair<int,pair<pair<int,int>,pair<int,int>>>>> q;
// priority_queue<pair<int,pair<int, pair<pair<int,int>,pair<int,int>>>>,vector<pair<int,pair<int, pair<pair<int,int>,pair<int,int>>>>>,greater<pair<int,pair<int, pair<pair<int,int>,pair<int,int>>>>>> q;
priority_queue<pair<int, pair<pair<int,int>,pair<int,int>>>,vector<pair<int, pair<pair<int,int>,pair<int,int>>>>,greater<pair<int, pair<pair<int,int>,pair<int,int>>>>> q;
map<pair<pair<int,int>,pair<int,int>>,int> d;
map<pair<pair<int,int>,pair<int,int>>,pair<pair<int,int>,pair<pair<int,int>,pair<int,int>>>> d2;
d[{{A,B},{C,0}}] = 1;
d2[{{A,B},{C,0}}] = {{-1,-1},{{-1,-1},{-1,-1}}};
q.push({1, {{A,B},{C,0}}});
// cout<<"test"<<endl;
while(!q.empty()){
pair<int, pair<pair<int,int>,pair<int,int>>> p = q.top();q.pop();
pair<pair<int,int>,pair<int,int>> v = p.second;
// cout<<"A "<<v.a<<" B "<<v.b<<" C "<<v.c<<" z "<<v.z<<endl;
if(min({v.a,v.b,v.c}) > max({D,E,F})) break;
if(v.a == E && v.b == F && v.c ||
v.a == E && v.c == F && v.b ||
v.b == E && v.a == F && v.c ||
v.b == E && v.c == F && v.a ||
v.c == E && v.a == F && v.b ||
v.c == E && v.b == F && v.a) {
// cout<<"[]"<<endl;
pair<pair<int,int>,pair<int,int>> V = p.second;
if(V.a == D && V.b == E && V.c == F) {
if(ans.size() && (int)ans.size() + 1 < d[V] - 1) return ;
if(d[V] == 1) {
ans.clear();
ans.push_back({2,'X'});
//return ;
} else {
// for(;V.a != -1;){
// ans.push_back({1, 'A' + d2[V].first.first});
// V = d2[V].second;
// }
ans.clear();
for(;;){
// cout<<"V A "<<V.a<<" B "<<V.b<<" C "<<V.c<<" "<< d2[V].first.first<<endl;
if(d2[V].first.first == -1) break;
ans.push_back({1, 'A' + d2[V].first.second});
V = d2[V].second;
// string str;
// cin>>str;
}
return ;
}
} else {
ans.clear();
for(;;){
// cout<<"V A "<<V.a<<" B "<<V.b<<" C "<<V.c<<" "<< d2[V].first.first<<endl;
if(d2[V].first.first == -1) break;
ans.push_back({1, 'A' + d2[V].first.second});
V = d2[V].second;
// string str;
// cin>>str;
}
ans.push_back({2,'X'});
}
// return ;
}
// cout<<"<><>"<<endl;
if(d.count(v) && d[v] < p.first) continue;
{
pair<pair<int,int>,pair<int,int>> n;
n = v;
n.a *= 2;
n.b *= 2;
if(d.count(n) == 0 || d[n] < d[v] + 2) {
d[n] = d[v] + 2;
d2[n] = {{1,2}, v};
q.push({d[n], n});
}
}
{
pair<pair<int,int>,pair<int,int>> n;
n = v;
n.a *= 2;
n.c *= 2;
if(d.count(n) == 0 || d[n] < d[v] + 2) {
d[n] = d[v] + 2;
d2[n] = {{1,1}, v};
q.push({d[n], n});
}
}
{
pair<pair<int,int>,pair<int,int>> n;
n = v;
n.b *= 2;
n.c *= 2;
if(d.count(n) == 0 || d[n] < d[v] + 2) {
d[n] = d[v] + 2;
d2[n] = {{1,0}, v};
q.push({d[n], n});
}
}
}
}
signed main(){
cout<<fixed<<setprecision(10);
cin>>A>>B>>C>>D>>E>>F;
dijkstra();
if(ans.size() == 0) cout<<"No"<<endl;
else {
cout<<"Yes"<<endl;
for(int i = ans.size()-1; i >= 0; i--) {
if(ans[i].first == 1) {
cout<<1<<" "<<ans[i].second<<endl;
cout<<1<<" "<<ans[i].second<<endl;
} else {
cout<<2<<endl;
}
}
}
return 0;
}