QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#94713#3236. Hills And Valleyswhatever#0 114ms15264kbC++172.3kb2023-04-07 16:01:262023-04-07 16:01:29

Judging History

This is the latest submission verdict.

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-04-07 16:01:29]
  • Judged
  • Verdict: 0
  • Time: 114ms
  • Memory: 15264kb
  • [2023-04-07 16:01:26]
  • Submitted

answer

#include <bits/stdc++.h>
#define rep(i, a, b) for (int i = a, I = b; i <= I; ++i)
#define per(i, a, b) for (int i = a, I = b; i >= I; --i)
using namespace std;
using i64 = long long;
using i128 = __int128_t;
template<typename T> void up(T &x, T y) { x < y ? x = y : 0; }
template<typename T> void down(T &x, T y) { x > y ? x = y : 0; }
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
int rng(int l, int r) { return l + rnd() % (r - l + 1); }

const int N = 100005;
char s[N];
int n, f[N][10], g[N][10], dp[N][10], l, r, ans;

void up(int L, int R, int ANS) {
    if (ANS > ans) {
        ans = ANS;
        l = L, r = R;
    }
}

void solve(int l, int r) {
    if (l == r) return;
    int mid = (l + r) >> 1;
    rep(x, 0, 9) {
        memset(dp[mid], 0xcf, sizeof dp[mid]);
        memset(dp[mid + 1], 0xcf, sizeof dp[mid + 1]);
        rep(i, x, 9) dp[mid][i] = 0;
        rep(i, 0, x) dp[mid + 1][i] = 0;
        per(i, mid, l) {
            ++dp[i][s[i]];
            rep(j, 1, 9) up(dp[i][j], dp[i][j - 1]);
            if (i > l) memcpy(dp[i - 1], dp[i], sizeof dp[i]);
        }
        rep(i, mid + 1, r) {
            ++dp[i][s[i]];
            per(j, 8, 0) up(dp[i][j], dp[i][j + 1]);
            if (i < r) memcpy(dp[i + 1], dp[i], sizeof dp[i]);
        }
        rep(a, 0, x) rep(b, x, 9) {
            int lp = -1, lv = -1;
            int rp = -1, rv = -1;
            rep(i, l, mid) {
                int cv = dp[i][b] + f[i - 1][a];
                if (cv > lv) lv = cv, lp = i;
            }
            rep(i, mid + 1, r) {
                int cv = dp[i][a] + g[i + 1][b];
                if (cv > rv) rv = cv, rp = i;
            }
            up(lp, rp, lv + rv);
        }
    }
}

void solve() {
    cin >> n >> (s + 1);
    rep(i, 1, n) {
        memcpy(f[i], f[i - 1], sizeof f[i]);
        ++f[i][s[i] -= '0'];
        rep(j, 1, 9) up(f[i][j], f[i][j - 1]);
    }
    memset(g[n + 1], 0, sizeof g[n + 1]);
    per(i, n, 1) {
        memcpy(g[i], g[i + 1], sizeof g[i]);
        ++g[i][s[i]];
        per(j, 8, 0) up(g[i][j], g[i][j + 1]);
    }

    l = r = 1, ans = f[n][9];
    solve(1, n);
    cout << ans << " " << l << " " << r << "\n";
}

int main() {
	ios::sync_with_stdio(0), cin.tie(0);

    int T; cin >> T;
    while (T--) solve();

	return 0;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 114ms
memory: 15264kb

input:

100
564
3348010339062339968164170543732424036101480063385567796871300633327190066610177797479597931706239956680908434521050648311220502482402268964497684451036156162125014743550622955579737715237323508714467463047351532756224409691528642332476831673220319724437158730801472447651264708417183934709815...

output:

108 77 492
296 760 1295
1419 1 1585
92 46 399
888 745 1073
262 502 1212
338 189 971
257 448 1157
832 290 1120
1804 43 1416
102 1 504
103 3 420
99 7 497
263 339 1113
1305 489 836
298 102 924
98 140 358
107 175 471
354 28 511
1108 1 1778
95 96 278
1094 538 1098
1039 222 627
706 533 1340
573 185 1381
9...

result:

wrong answer read m = 257 but expected m = 258 (test case 8)