Submission #921320


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

#define _p(...) (void)printf(__VA_ARGS__)
#define forr(x,arr) for(auto&& x:arr)
#define _overload3(_1,_2,_3,name,...) name
#define _rep2(i,n) _rep3(i,0,n)
#define _rep3(i,a,b) for(int i=int(a);i<int(b);++i)
#define rep(...) _overload3(__VA_ARGS__,_rep3,_rep2,)(__VA_ARGS__)
#define _rrep2(i,n) _rrep3(i,0,n)
#define _rrep3(i,a,b) for(int i=int(b)-1;i>=int(a);i--)
#define rrep(...) _overload3(__VA_ARGS__,_rrep3,_rrep2,)(__VA_ARGS__)
#define ALL(x) (x).begin(), (x).end()
#define BIT(n) (1LL<<(n))
#define SZ(x) ((int)(x).size())
#define fst first
#define snd second
using ll=long long;using pii=pair<int,int>;using vb=vector<bool>;
using vi=vector<int>;using vvi=vector<vi>;using vvvi=vector<vvi>;
using vl=vector<ll>;using vvl=vector<vl>;using vvvl=vector<vvl>;
using vd=vector<double>;using vvd=vector<vd>;using vvvd=vector<vvd>;
using vpii=vector<pii>;using vvpii=vector<vpii>;using vvvpii=vector<vvpii>;
int i() { int i; scanf("%d", &i); return i;}
int l() { ll l; scanf("%lld", &l); return l;}
vi ia(int n) {vi ret(n); rep(i, n) scanf("%d", &ret[i]); return ret;}
vl la(int n) {vl ret(n); rep(i, n) scanf("%lld", &ret[i]); return ret;}

template <typename V> struct Trie {
  const int EMPTY = -1;
  vector<vector<int>> trie;
  vector<V> vals;
  vi num_c;
  vi len;
  vb end;

  Trie() {
    assign_new_state();
  }

  void add_word(const string& word, const V& val) {
    int now = 0;
    for (char c : word) {
      c -= 'a';
      if (trie[now][c] == EMPTY) {
        trie[now][c] = SZ(trie);
        assign_new_state();
        num_c[now]++;
      }
      now = trie[now][c];
    }
    vals[now] = val;
    end[now] = 1;
  }

  private:
  void assign_new_state() {
    trie.emplace_back(26, EMPTY);
    vals.push_back(0);
    num_c.push_back(0);
    len.push_back(1);
    end.push_back(0);
  };
};

void Main() {
  int N;
  cin >> N;
  Trie<int> trie;
  vector<string> S(N);

  rep(i, N) {
    cin >> S[i];
    trie.add_word(S[i], 1);
  }

  vi &val = trie.vals;
  vvi &tri = trie.trie;
  vb &end = trie.end;
  vi &num_c = trie.num_c;
  vi &len = trie.len;

  int T = SZ(val);

  rrep(i, T) {
    rep(j, 26) if (tri[i][j] != trie.EMPTY) {
      val[i] += val[tri[i][j]];
    }
  }

  function<void(int)> dfs = [&](int now) {
    rep(i, 26) {
      int cur = tri[now][i];
      if (cur != trie.EMPTY) {
        if (num_c[cur] == 1 && !end[cur]) {
          // 子の子が1つ
          int l = 1;
          while (num_c[cur] == 1 && !end[cur]) {
            rep(j, 26) {
              if (tri[cur][j] != trie.EMPTY) {
                cur = tri[cur][j];
                break;
              }
            }
            l++;
          }
          //_p("%d:%d: %d\n", now, i, cur);
          tri[now][i] = cur;
          len[tri[now][i]] = l;
        }
        dfs(tri[now][i]);
      }
    }
  };
  dfs(0);

  //rep(ii,SZ(tri)) { cout << "tri["<<ii<<"]:"; rep(jj, SZ(tri[ii])) cout << ' ' << tri[ii][jj]; cout << endl; }
  //cout << "len:"; rep(ii,SZ(len)) cout << ' ' << len[ii]; cout << endl;
  //cout << "val:"; rep(ii,SZ(val)) cout << ' ' << val[ii]; cout << endl;

  int Q;
  cin >> Q;

  while (Q--) {
    int k; string p;
    cin >> k >> p;
    k--;
    const string &s = S[k];
    vector<vb> t(26, vb(26));
    rep(i, 26) {
      char f = p[i];
      rep(j, i+1, 26) {
        char l = p[j];
        t[f-'a'][l-'a'] = 1;
        t[l-'a'][f-'a'] = 0;
      }
    }

    //cout<<"s: "<<s<<endl;

    int n = SZ(s);
    int now = 0;
    int ans = 0;
    int pos = 0;
    while (pos < n) {
      int c = s[pos] - 'a';
      //_p("%d\n", c);
      rep(i, 26) if (tri[now][i] != trie.EMPTY) {
        if (t[i][c]) {
          ans += val[tri[now][i]];
        }
      }
      if (end[now]) ans++;
      now = tri[now][c];
      pos += len[now];
    }
    cout << ans+1 << endl;
  }
}
int main() { cin.tie(0); ios::sync_with_stdio(false); Main(); return 0; }

Submission Info

Submission Time
Task E - Lexicographical disorder
User shiratty8
Language C++14 (GCC 5.4.1)
Score 1100
Code Size 4072 Byte
Status AC
Exec Time 3371 ms
Memory 59560 KB

Compile Error

./Main.cpp: In function ‘int i()’:
./Main.cpp:23:33: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
 int i() { int i; scanf("%d", &i); return i;}
                                 ^
./Main.cpp: In function ‘int l()’:
./Main.cpp:24:34: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
 int l() { ll l; scanf("%lld", &l); return l;}
                                  ^
./Main.cpp: In function ‘vi ia(int)’:
./Main.cpp:25:56: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
 vi ia(int n) {vi ret(n); rep(i, n) scanf("%d", &ret[i]); return ret;}
                                                        ^
./Main.cpp: In function ‘vl la(int)’:
./Main.cpp:26:58: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
 vl la...

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1100 / 1100
Status
AC × 2
AC × 42
Set Name Test Cases
Sample s1.txt, s2.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, s1.txt, s2.txt
Case Name Status Exec Time Memory
01.txt AC 1004 ms 20912 KB
02.txt AC 1007 ms 20912 KB
03.txt AC 1000 ms 20912 KB
04.txt AC 1000 ms 20912 KB
05.txt AC 1073 ms 46632 KB
06.txt AC 1052 ms 58664 KB
07.txt AC 1045 ms 59304 KB
08.txt AC 1012 ms 59432 KB
09.txt AC 1029 ms 59432 KB
10.txt AC 1011 ms 59256 KB
11.txt AC 957 ms 6840 KB
12.txt AC 945 ms 9652 KB
13.txt AC 958 ms 12596 KB
14.txt AC 1050 ms 55976 KB
15.txt AC 1020 ms 59560 KB
16.txt AC 1011 ms 59256 KB
17.txt AC 979 ms 59272 KB
18.txt AC 2909 ms 1280 KB
19.txt AC 2897 ms 1280 KB
20.txt AC 3362 ms 1408 KB
21.txt AC 3353 ms 1408 KB
22.txt AC 3371 ms 1408 KB
23.txt AC 990 ms 13364 KB
24.txt AC 956 ms 6968 KB
25.txt AC 959 ms 9652 KB
26.txt AC 2791 ms 1280 KB
27.txt AC 947 ms 7092 KB
28.txt AC 942 ms 9396 KB
29.txt AC 923 ms 8884 KB
30.txt AC 971 ms 14768 KB
31.txt AC 950 ms 18736 KB
32.txt AC 918 ms 13104 KB
33.txt AC 922 ms 22704 KB
34.txt AC 915 ms 18352 KB
35.txt AC 919 ms 24492 KB
36.txt AC 987 ms 23472 KB
37.txt AC 946 ms 30272 KB
38.txt AC 964 ms 30272 KB
39.txt AC 3 ms 256 KB
40.txt AC 3 ms 256 KB
s1.txt AC 3 ms 256 KB
s2.txt AC 3 ms 256 KB