QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#286451#1965. Triowarner1129WA 0ms3864kbC++203.3kb2023-12-17 21:38:422023-12-17 21:38:42

Judging History

你现在查看的是最新测评结果

  • [2023-12-17 21:38:42]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3864kb
  • [2023-12-17 21:38:42]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
template <class... T> void dbg(T... x) { char e{}; ((cerr << e << x, e = ' '), ...); }
template <class T> void org(T l, T r) { while (l != r) cerr << ' ' << *l++; cerr << '\n'; }
#define debug(x...) dbg(#x, '=', x, '\n')
#define olist(x...) dbg(#x, '='), org(x)
#else
#define debug(...) ((void)0)
#define olist(...) ((void)0)
#endif
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define ff first
#define ss second

using u32 = unsigned int;
using i64 = long long;
using u64 = unsigned long long;
using i128 = __int128;
using u128 = unsigned __int128;
using Pt = pair<int, int>;

template <class T> inline constexpr T inf = numeric_limits<T>::max() / 2;
constexpr int mod = 998244353;
constexpr double eps = 0;

template<class T> bool chmin(T &a, T b) { return (b < a and (a = b, true)); }
template<class T> bool chmax(T &a, T b) { return (a < b and (a = b, true)); }
template<class... T> int add(T... x) { int t{}; return (((t += x) %= mod), ...), t; }
template<class... T> int mul(T... x) { i64 t{1}; return (((t *= x) %= mod), ...), t; }

const int kN = 10000 + 5;

int cnt[kN]{};

void solve() {
    int n;
    cin >> n;

    vector<string> S(n);
    for (auto &s : S) {
        cin >> s;
    }

    i64 ans = 0;
    
    for (int e = 0; e < (1 << 4) - 1; e++) {
        vector<pair<string, string>> E(n);
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 4; j++)
                if (e >> j & 1) {
                    E[i].ff += S[i][j];
                } else {
                    E[i].ss += S[i][j];
                }
        }

        sort(all(E));
        
        int len = E[0].ss.size();
        
        vector<vector<pair<int, int>>> F(n);
        for (int i = 0; i < n; i++) {
            auto rec = [&](auto self, int val, int k, int f) -> void {
                if (k == len) {
                    F[i].emplace_back(val, f % 2 == 1 ? -1 : 1);
                    return;
                }
                self(self, val * 10 + E[i].ss[k] - '0', k + 1, f + 1);
                self(self, val * 10, k + 1, f + 1);
            };
            rec(rec, 0, 0, 0);
        }
        
        for (int l = 0, r = 0; l < n; l = r) {
            while (r < n and E[r].ff == E[l].ff) r++;
            debug(bitset<4>(e), l, r);
            for (int i = l + 2; i < r; i++) {
                // debug(i, E[i].ff, E[i].ss);
                vector<int> del;
                for (int j = l; j < i; j++) {
                    bool dif = true;
                    for (int k = 0; k < len; k++)
                        if (E[j].ss[k] == E[i].ss[k]) {
                            dif = false;
                            break;
                        }
                    // debug(j, E[j].ff, E[j].ss);
                    if (!dif) continue;
                    del.push_back(j);
                    for (auto [s, v] : F[j]) {
                        ans += cnt[s] * v;
                        cnt[s]++;
                    }
                }
                for (int j : del) for (auto [s, _] : F[j]) {
                    cnt[s] = 0;
                }
            }
        }
    }

    cout << ans << '\n';
}


signed main() {
    cin.tie(0)->sync_with_stdio(false);
    cin.exceptions(cin.failbit);
    int T = 1;
    // cin >> T;
    while (T--) {
        solve();
    }
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3864kb

input:

4
1234
2345
3456
4567

output:

4

result:

ok single line: '4'

Test #2:

score: 0
Accepted
time: 0ms
memory: 3676kb

input:

9
1299
2399
3499
4599
5699
6799
7899
8999
9199

output:

84

result:

ok single line: '84'

Test #3:

score: -100
Wrong Answer
time: 0ms
memory: 3576kb

input:

9
1239
2349
3459
4569
5679
6789
7899
8919
9129

output:

-84

result:

wrong answer 1st lines differ - expected: '84', found: '-84'