結果
| 問題 |
No.859 路線A、路線B、路線C
|
| コンテスト | |
| ユーザー |
peroon
|
| 提出日時 | 2019-08-13 15:42:55 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 1,000 ms |
| コード長 | 3,654 bytes |
| コンパイル時間 | 1,587 ms |
| コンパイル使用メモリ | 168,044 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-09-19 13:30:05 |
| 合計ジャッジ時間 | 2,704 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 12 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
#define FOR(i,a,b) for(ll i=(a);i<(b);++i)
#define rep(i,a) FOR(i, 0, a)
#define ALL(v) (v).begin(), (v).end()
#define p(s) cout<<(s)<<endl
#define p2(s, t) cout << (s) << " " << (t) << endl
#define br() p("")
#define pn(s) cout << (#s) << " " << (s) << endl
#define p_yes() p("YES")
#define p_no() p("NO")
const ll mod = 1e9 + 7;
const ll inf = 1e18;
void vprint(vector<ll> A){
ll L = A.size();
FOR(i, 0, L){
if(i) cout << ' ';
cout << A[i];
}
cout << endl;
}
ll d[12][12];
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
// input
ll X, Y, Z; cin >> X >> Y >> Z;
char s0; cin >> s0;
ll t0; cin >> t0;
char s1; cin >> s1;
ll t1; cin >> t1;
rep(i, 12){
rep(j, 12){
if(i==j){
d[i][j] = 0;
}else{
d[i][j] = inf;
}
}
}
d[0][4] = d[4][0] = 1;
d[0][8] = d[8][0] = 1;
d[4][8] = d[8][4] = 1;
d[3][7] = d[7][3] = 1;
d[7][11] = d[11][7] = 1;
d[3][11] = d[11][3] = 1;
d[0][3] = d[3][0] = X-1;
d[4][7] = d[7][4] = Y-1;
d[8][11] = d[11][8] = Z-1;
if(s0==s1){
if(t0>t1) swap(t0, t1); // t0<t1とする
if(s0=='A'){
d[0][1] = d[1][0] = t0-1;
d[1][2] = d[2][1] = t1-t0;
d[2][3] = d[3][2] = X-t1;
}
else if(s0=='B'){
d[4][5] = d[5][4] = t0-1;
d[5][6] = d[6][5] = t1-t0;
d[6][7] = d[7][6] = Y-t1;
}
else{
d[8][9] = d[9][8] = t0-1;
d[9][10] = d[10][9] = t1-t0;
d[10][11] = d[11][10] = Z-t1;
}
}
else{
if(s0=='A'){
d[0][1] = d[1][0] = t0-1;
d[1][3] = d[3][1] = X-t0;
}
else if(s0=='B'){
d[4][5] = d[5][4] = t0-1;
d[5][7] = d[7][5] = Y-t0;
}
else{
d[8][9] = d[9][8] = t0-1;
d[9][11] = d[11][9] = Z-t0;
}
// S1
if(s1=='A'){
d[0][1] = d[1][0] = t1-1;
d[1][3] = d[3][1] = X-t1;
}
else if(s1=='B'){
d[4][5] = d[5][4] = t1-1;
d[5][7] = d[7][5] = Y-t1;
}
else{
d[8][9] = d[9][8] = t1-1;
d[9][11] = d[11][9] = Z-t1;
}
}
// pn(d[0][1]);
// pn(d[0][2]);
// pn(d[0][3]);
// exit(0);
FOR(i, 0, 12){ // 経由点
FOR(j, 0, 12){ // 始点
FOR(k, 0, 12){ // 終点
d[j][k] = min(d[j][k], d[j][i] + d[i][k]);
}
}
}
// p2(s0, t0);
// p2(s1, t1);
ll ans;
if(s0==s1){
if(s0=='A'){
ans = d[1][2];
}else if(s0=='B'){
ans = d[5][6];
}else{
ans = d[9][10];
}
}
else{
if(s0=='A'){
if(s1=='B'){
ans = d[1][5];
}else{
// C
ans = d[1][9];
}
}
else if(s0=='B'){
if(s1=='A'){
ans = d[5][1];
}else{
// C
ans = d[5][9];
}
}
// s0=='C'
else{
if(s1=='A'){
ans = d[1][9];
}else{
// B
ans = d[5][9];
}
}
}
p(ans);
return 0;
}
peroon