提出 #5691320


ソースコード 拡げる

#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cstring>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <bitset>
#include <numeric>
#include <utility>
#include <iomanip>
#include <algorithm>
#include <functional>
#include <unordered_map>
using namespace std;

template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }

template<class T> vector<T> make_vec(size_t a) { return vector<T>(a); }
template<class T, class... Ts> auto make_vec(size_t a, Ts... ts) {
  return vector<decltype(make_vec<T>(ts...))>(a, make_vec<T>(ts...));
}
template<class T, class V>
typename enable_if<is_class<T>::value == 0>::type fill(T &t, const V &v) {
    t = v;
}
template<class T, class V>
typename enable_if<is_class<T>::value != 0>::type fill(T &t, const V &v){
    for (auto &e : t) fill(e, v);
}

#define COUT(x) cout << #x << " = " << (x) << " (L" << __LINE__ << ")" << endl
template<class T1, class T2> ostream& operator << (ostream &s, pair<T1,T2> P)
{ return s << '<' << P.first << ", " << P.second << '>'; }
template<class T> ostream& operator << (ostream &s, vector<T> P)
{ for (int i = 0; i < P.size(); ++i) { if (i > 0) { s << " "; } s << P[i]; } return s; }
template<class T> ostream& operator << (ostream &s, vector<vector<T> > P)
{ for (int i = 0; i < P.size(); ++i) { s << endl << P[i]; } return s << endl; }

#define EACH(i, s) for (__typeof__((s).begin()) i = (s).begin(); i != (s).end(); ++i)
template<class T> ostream& operator << (ostream &s, set<T> P)
{ EACH(it, P) { s << "<" << *it << "> "; } return s << endl; }
template<class T1, class T2> ostream& operator << (ostream &s, map<T1,T2> P)
{ EACH(it, P) { s << "<" << it->first << "->" << it->second << "> "; } return s << endl; }



int N, K;
vector<int> A;
set<int> sA;
vector<string> S;

string solve() {
    string res = "";
    for (int i = 0; i < 100000; ++i) {
        set<char> se;
        bool ok = true;
        for (auto a : A) {
            if (i >= S[a].size()) {
                ok = false;
                break;
            }
            se.insert(S[a][i]);
        }
        if (!ok || se.size() > 1) break;
        res += *se.begin();
    }

    int ma = 0;
    for (int i = 0; i < N; ++i) {
        if (sA.count(i)) continue;
        if (S[i].size() >= res.size() && S[i].substr(0, (int)res.size()) == res) return "-1";
        int pl = min((int)res.size() - 1, (int)S[i].size());
        for (int j = min((int)res.size(), (int)S[i].size()) - 1; j >= 0; --j) {
            if (res[j] != S[i][j]) pl = j;
        }
        ma = max(ma, pl+1);
    }
    //COUT(ma);
    
    return res.substr(0, ma);
}

int main() {
    while (cin >> N >> K) {
        A.resize(K);
        sA.clear();
        for (int i = 0; i < K; ++i) cin >> A[i], --A[i], sA.insert(A[i]);
        S.resize(N);
        for (int i = 0; i < N; ++i) cin >> S[i];
        cout << solve() << endl;
    }
}







提出情報

提出日時
問題 C - 検索
ユーザ drken
言語 C++14 (GCC 5.4.1)
得点 400
コード長 3238 Byte
結果 AC
実行時間 106 ms
メモリ 10752 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 400 / 400
結果
AC × 3
AC × 30
セット名 テストケース
Sample sample1.txt, sample2.txt, sample3.txt
All sample1.txt, sample2.txt, sample3.txt, in1.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in2.txt, in20.txt, in3.txt, in4.txt, in5.txt, in6.txt, in7.txt, in8.txt, in9.txt, long.txt, long2.txt, sample1.txt, sample2.txt, sample3.txt, long.txt, long2.txt
ケース名 結果 実行時間 メモリ
in1.txt AC 5 ms 384 KiB
in10.txt AC 4 ms 384 KiB
in11.txt AC 8 ms 896 KiB
in12.txt AC 5 ms 384 KiB
in13.txt AC 6 ms 512 KiB
in14.txt AC 5 ms 384 KiB
in15.txt AC 5 ms 384 KiB
in16.txt AC 1 ms 256 KiB
in17.txt AC 5 ms 384 KiB
in18.txt AC 5 ms 512 KiB
in19.txt AC 8 ms 896 KiB
in2.txt AC 9 ms 896 KiB
in20.txt AC 7 ms 512 KiB
in3.txt AC 34 ms 6272 KiB
in4.txt AC 103 ms 10752 KiB
in5.txt AC 5 ms 384 KiB
in6.txt AC 2 ms 256 KiB
in7.txt AC 4 ms 384 KiB
in8.txt AC 8 ms 896 KiB
in9.txt AC 106 ms 10752 KiB
long.txt AC 7 ms 512 KiB
long2.txt AC 14 ms 2304 KiB
sample1.txt AC 1 ms 256 KiB
sample2.txt AC 1 ms 256 KiB
sample3.txt AC 1 ms 256 KiB