85分WA#10 12 13,求hack
查看原帖
85分WA#10 12 13,求hack
576157
vdfes楼主2025/6/21 14:12

思路就是,先把字符串分开存到vector中
分为3种情况,无通配符,单通配符和双通配符
无通配符和单通配符直接扫一遍,双通配符判断前缀和后缀是否相等

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double llb;
#define F(i, a, b) for (ll i = (a); i <= (b); i++)
#define DF(i, a, b) for (int i = (a); i >= (b); i--)
#define FE(i, a, b, c) for (int i = (a); i <= (b); i += (c))
#define DFE(i, a, b, c) for (int i = (a); i >= (b); i -= (c))
#define ED(i, u) for (int i = hea[u]; i; i = nex[i])
#define pii pair<int, int>
#define fi first
#define se second
#define All(x) x.begin(), x.end()
#define MST(x) memset(x, 0, sizeof(x))
#define PI acos(-1)
template <class... T> void re(T &...a) { (cin >> ... >> a); }
template <class T, class... Ts> void pr(const T &a, const Ts &...b) {
  cout << a;
  (cout << ... << (cout << ' ', b));
  cout << '\n';
}
template <class T, class... Ts> void prs(const T &a, const Ts &...b) {
  cout << a;
  (cout << ... << (cout << ' ', b));
  cout << ' ';
}
template <class T, class... Ts> void prn(const T &a, const Ts &...b) {
  cout << a;
  (cout << ... << (cout << ' ', b));
}
void pr() { cout << '\n'; }
#define N 10005
#define P 1000000007
#define Say(x) pr(x ? "Yes" : "No")
int n, m;
struct Bad {
  int k;
  vector<string> s;
  int op;
} a[N];
int main() {
#ifndef ONLINE_JUDGE
  freopen("admin.in", "r", stdin);
  // freopen("admin.out", "w", stdout);
#endif
  ios::sync_with_stdio(false), cin.tie(nullptr);
  // cout << fixed << setprecision(20);
  re(n);
  auto split = [&](string ss) {
    istringstream iss(ss);
    string tmp;
    vector<string> s;
    while (getline(iss, tmp, '/')) {
      if (!tmp.empty()) {
        s.push_back(tmp);
      }
    }
    return s;
  };
  auto check = [&](int k, vector<string> s) -> bool {
    int i = 0, j = 0;
    bool pre = 0;
    if (a[k].op == 0) {
      if (a[k].s.size() != s.size())
        return 0;
      F(i, 0, s.size() - 1) {
        if (a[k].s[i] != s[i])
          return 0;
      }
      return 1;
    }
    if (a[k].op == 1) {
      if (a[k].s.size() != s.size())
        return 0;
      for (int i = 0, j = 0; i < a[k].s.size() && j < s.size(); i++, j++) {
        if (a[k].s[i] == "*" && !pre) {
          pre = 1;
        } else {
          if (a[k].s[i] != s[j])
            return 0;
        }
      }
      return 1;
    }
    if (a[k].s.size() - 1 > s.size())
      return 0;
    for (int i = 0, j = 0; a[k].s[i] != "**"; i++, j++) {
      if (a[k].s[i] != s[j])
        return 0;
    }
    for (int i = a[k].s.size() - 1, j = s.size() - 1; a[k].s[i] != "**"; i--, j--) {
      if (a[k].s[i] != s[j])
        return 0;
    }
    return 1;
  };
  F(i, 1, n) {
    string ss;
    re(a[i].k, ss);
    a[i].s = split(ss);
    for (auto j : a[i].s) {
      if (j == "**")
        a[i].op = 2;
      else if (j == "*")
        a[i].op = 1;
    }
  }
  re(m);
  while (m--) {
    string ss;
    re(ss);
    auto s = split(ss);
    int ans = -1;
    F(i, 1, n) {
      if (check(i, s)) {
        ans = max(a[i].k, ans);
      }
    }
    if (ans == -1)
      pr("SAFE");
    else
      pr("ALERT:", ans);
  }
  return 0;
}
2025/6/21 14:12
加载中...