提出 #461331


ソースコード 拡げる

#include <bits/stdc++.h>

#include <iostream>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <sstream>
#include <set>
#include <map>
#include <algorithm>
#include <cstdio>
#include <cstdlib>



#define rep(i,n) for(int i=0;i<(int)(n);++i)
#define iter(a) __typeof(a.begin())
#define FOR(it,a) for(iter(a)it=a.begin();it!=a.end();++it)
#define F first
#define S second
#define SZ(a) (int)((a).size())
#define sz(a) SZ(a)
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define ALL(a) (a).begin(),(a).end()
using namespace std;

typedef long long ll;
typedef pair<int,int> PI;
typedef unsigned long long ull;

#ifdef ONLINE_JUDGE
#define PR(...) (void(0))
#else
#define PR(...) do{cerr << "line : " << __LINE__ << ", " << endl; pr(#__VA_ARGS__, __VA_ARGS__);}while(0)
template<class T>
void pr(const string& name, T t){
  cerr << name << ": " << t << endl;
}
template<typename T, typename ... Types>
void pr(const string& names, T t, Types ... rest) {
  auto p = names.find(',');
  cerr << names.substr(0, p) << ": " << t << ", ";
  pr(string(names, p + 1), rest ...);
}
#endif

template<class T,class U> ostream& operator<< (ostream& o, const pair<T,U>& v){return o << "(" << v.F << ", " << v.S << ")";}
template<class T> ostream& operator<< (ostream& o, const vector<T>& v){o << "{";rep(i,SZ(v)) o << (i?", ":"") << v[i];return o << "}";}
template<class T,class U> ostream& operator<< (ostream& o, const map<T,U>& v){o << "{";for(const auto& e : v) o << e << ", ";return o << "}";}
template<class T> ostream& operator<< (ostream& o, const set<T>& v){o << "{";for(const auto& e : v) o << e << ", ";return o << "}";}
template<class T> string to_s(const T& v){ostringstream is;is << v;return is.str();}

const int dx[]={0,1,0,-1,1,1,-1,-1,0};
const int dy[]={1,0,-1,0,-1,1,1,-1,0};

#define endl '\n'

int ok[100][100];
pair<int, string> ans;
int s, g;
vector<string> in;

void dfs(int de, int cv, string a, int re){
  if(de > ans.F) return;
  re |= cv == g;
  if(re && ok[cv][s]){
    ans = min(ans, mp(de, a));
  }
  
  rep(i, 10){
    if(ok[cv][i]){
      ok[cv][i] = ok[i][cv] = 0;
      dfs(de + 1, i, a + in[i], re);
      ok[cv][i] = ok[i][cv] = 1;
    }
  }
}

int main(int argc, char *argv[])
{
  int n;
  cin >> n;

  in.resize(n);
  rep(i, n) cin >> in[i];
  int m;
  cin >> m;
  vector<pair<string, string> > ed(m);
  rep(i, m) cin >> ed[i].F >> ed[i].S;
  
  rep(i, m){
    int a = find(ALL(in), ed[i].F) - in.begin();
    int b = find(ALL(in), ed[i].S) - in.begin();
    //PR(a, b);
    ok[a][b] = ok[b][a] = 1;
  }
    


  {
    string t;
    cin >> t;
    s = find(ALL(in), t) - in.begin();
  }

  {
    string t;
    cin >> t;
    g = find(ALL(in), t) - in.begin();
  }
  ans.F = 1000;
  dfs(0, s, in[s], 0);
  
  cout << ans.S << endl;
  return 0;
  
  set<pair<pair<int, string>, pair<int,int> > > q;
  

  q.insert(mp(mp(0,in[s]), mp(s,0)));
  
  map<pair<int, int>, pair<int, string> > vis;


  
  while(!q.empty()){
    auto cv = *q.begin();
    q.erase(cv);
    cv.S.S |= cv.S.F == g;
    if(vis.count(cv.S) && vis[cv.S] <= cv.F) continue;
    PR(cv);
    vis[cv.S] = cv.F;
    if(cv.S.S && ok[cv.S.F][s]){
      ans = min(ans, mp(cv.F.F + 1, cv.F.S));
    }
    
    rep(i, n){
      // PR(ok[cv.S.F][i]);
      if(ok[cv.S.F][i])
        q.insert(mp(mp(cv.F.F + 1, cv.F.S + in[i]),mp(i,cv.S.S)));
    }
  }
  
  cout << ans.S << endl;
}

提出情報

提出日時
問題 D - 氷柱の上の聖剣
ユーザ maguro
言語 C++11 (GCC 4.9.2)
得点 100
コード長 3559 Byte
結果 AC
実行時間 168 ms
メモリ 928 KiB

ジャッジ結果

セット名 All
得点 / 配点 100 / 100
結果
AC × 23
セット名 テストケース
All 00_sample_00.txt, 00_sample_01.txt, 05_corner_00.txt, 05_corner_01.txt, 05_corner_02.txt, 10_min_00.txt, 10_min_01.txt, 10_min_02.txt, 10_wrong_answer_00.txt, 20_max_00.txt, 20_max_01.txt, 20_max_02.txt, 90_random_00.txt, 90_random_01.txt, 90_random_02.txt, 90_random_03.txt, 90_random_04.txt, 90_random_05.txt, 90_random_06.txt, 90_random_07.txt, 90_random_08.txt, 90_random_09.txt, 99_medium_00.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 26 ms 800 KiB
00_sample_01.txt AC 25 ms 920 KiB
05_corner_00.txt AC 25 ms 928 KiB
05_corner_01.txt AC 26 ms 804 KiB
05_corner_02.txt AC 26 ms 804 KiB
10_min_00.txt AC 25 ms 804 KiB
10_min_01.txt AC 25 ms 916 KiB
10_min_02.txt AC 23 ms 928 KiB
10_wrong_answer_00.txt AC 25 ms 920 KiB
20_max_00.txt AC 25 ms 924 KiB
20_max_01.txt AC 25 ms 728 KiB
20_max_02.txt AC 168 ms 800 KiB
90_random_00.txt AC 24 ms 800 KiB
90_random_01.txt AC 24 ms 928 KiB
90_random_02.txt AC 23 ms 924 KiB
90_random_03.txt AC 26 ms 800 KiB
90_random_04.txt AC 26 ms 800 KiB
90_random_05.txt AC 26 ms 736 KiB
90_random_06.txt AC 26 ms 800 KiB
90_random_07.txt AC 26 ms 804 KiB
90_random_08.txt AC 26 ms 800 KiB
90_random_09.txt AC 24 ms 920 KiB
99_medium_00.txt AC 27 ms 744 KiB