QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#330148#8048. Roman Masterucup-team112#AC ✓93ms4328kbC++209.6kb2024-02-17 13:10:502024-02-17 13:10:51

Judging History

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

  • [2024-02-17 13:10:51]
  • 评测
  • 测评结果:AC
  • 用时:93ms
  • 内存:4328kb
  • [2024-02-17 13:10:50]
  • 提交

answer

// #pragma GCC target("avx2")
// #pragma GCC optimize("O3")
// #pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
using namespace std;

namespace templates {
// type
using ll  = long long;
using ull = unsigned long long;
using Pii = pair<int, int>;
using Pil = pair<int, ll>;
using Pli = pair<ll, int>;
using Pll = pair<ll, ll>;
template <class T>
using pq = priority_queue<T>;
template <class T>
using qp = priority_queue<T, vector<T>, greater<T>>;
// clang-format off
#define vec(T, A, ...) vector<T> A(__VA_ARGS__);
#define vvec(T, A, h, ...) vector<vector<T>> A(h, vector<T>(__VA_ARGS__));
#define vvvec(T, A, h1, h2, ...) vector<vector<vector<T>>> A(h1, vector<vector<T>>(h2, vector<T>(__VA_ARGS__)));
// clang-format on

// for loop
#define fori1(a) for (ll _ = 0; _ < (a); _++)
#define fori2(i, a) for (ll i = 0; i < (a); i++)
#define fori3(i, a, b) for (ll i = (a); i < (b); i++)
#define fori4(i, a, b, c) for (ll i = (a); ((c) > 0 || i > (b)) && ((c) < 0 || i < (b)); i += (c))
#define overload4(a, b, c, d, e, ...) e
#define fori(...) overload4(__VA_ARGS__, fori4, fori3, fori2, fori1)(__VA_ARGS__)

// declare and input
// clang-format off
#define INT(...) int __VA_ARGS__; inp(__VA_ARGS__);
#define LL(...) ll __VA_ARGS__; inp(__VA_ARGS__);
#define STRING(...) string __VA_ARGS__; inp(__VA_ARGS__);
#define CHAR(...) char __VA_ARGS__; inp(__VA_ARGS__);
#define DOUBLE(...) double __VA_ARGS__; STRING(str___); __VA_ARGS__ = stod(str___);
#define VEC(T, A, n) vector<T> A(n); inp(A);
#define VVEC(T, A, n, m) vector<vector<T>> A(n, vector<T>(m)); inp(A);
// clang-format on

// const value
const ll MOD1   = 1000000007;
const ll MOD9   = 998244353;
const double PI = acos(-1);

// other macro
#ifndef RIN__LOCAL
#define endl "\n"
#endif
#define spa ' '
#define len(A) ll(A.size())
#define all(A) begin(A), end(A)

// function
vector<char> stoc(string &S) {
    int n = S.size();
    vector<char> ret(n);
    for (int i = 0; i < n; i++) ret[i] = S[i];
    return ret;
}
string ctos(vector<char> &S) {
    int n      = S.size();
    string ret = "";
    for (int i = 0; i < n; i++) ret += S[i];
    return ret;
}

template <class T>
auto min(const T &a) {
    return *min_element(all(a));
}
template <class T>
auto max(const T &a) {
    return *max_element(all(a));
}
template <class T, class S>
auto clamp(T &a, const S &l, const S &r) {
    return (a > r ? r : a < l ? l : a);
}
template <class T, class S>
inline bool chmax(T &a, const S &b) {
    return (a < b ? a = b, 1 : 0);
}
template <class T, class S>
inline bool chmin(T &a, const S &b) {
    return (a > b ? a = b, 1 : 0);
}
template <class T, class S>
inline bool chclamp(T &a, const S &l, const S &r) {
    auto b = clamp(a, l, r);
    return (a != b ? a = b, 1 : 0);
}

template <typename T>
T sum(vector<T> &A) {
    T tot = 0;
    for (auto a : A) tot += a;
    return tot;
}

template <typename T>
vector<T> compression(vector<T> X) {
    sort(all(X));
    X.erase(unique(all(X)), X.end());
    return X;
}

// input and output
namespace io {

// vector<T>
template <typename T>
istream &operator>>(istream &is, vector<T> &A) {
    for (auto &a : A) is >> a;
    return is;
}
template <typename T>
ostream &operator<<(ostream &os, vector<T> &A) {
    for (size_t i = 0; i < A.size(); i++) {
        os << A[i];
        if (i != A.size() - 1) os << ' ';
    }
    return os;
}

// vector<vector<T>>
template <typename T>
istream &operator>>(istream &is, vector<vector<T>> &A) {
    for (auto &a : A) is >> a;
    return is;
}
template <typename T>
ostream &operator<<(ostream &os, vector<vector<T>> &A) {
    for (size_t i = 0; i < A.size(); i++) {
        os << A[i];
        if (i != A.size() - 1) os << endl;
    }
    return os;
}

// pair<S, T>
template <typename S, typename T>
istream &operator>>(istream &is, pair<S, T> &A) {
    is >> A.first >> A.second;
    return is;
}
template <typename S, typename T>
ostream &operator<<(ostream &os, pair<S, T> &A) {
    os << A.first << ' ' << A.second;
    return os;
}

// vector<pair<S, T>>
template <typename S, typename T>
istream &operator>>(istream &is, vector<pair<S, T>> &A) {
    for (size_t i = 0; i < A.size(); i++) {
        is >> A[i];
    }
    return is;
}
template <typename S, typename T>
ostream &operator<<(ostream &os, vector<pair<S, T>> &A) {
    for (size_t i = 0; i < A.size(); i++) {
        os << A[i];
        if (i != A.size() - 1) os << endl;
    }
    return os;
}

// tuple
template <typename T, size_t N>
struct TuplePrint {
    static ostream &print(ostream &os, const T &t) {
        TuplePrint<T, N - 1>::print(os, t);
        os << ' ' << get<N - 1>(t);
        return os;
    }
};
template <typename T>
struct TuplePrint<T, 1> {
    static ostream &print(ostream &os, const T &t) {
        os << get<0>(t);
        return os;
    }
};
template <typename... Args>
ostream &operator<<(ostream &os, const tuple<Args...> &t) {
    TuplePrint<decltype(t), sizeof...(Args)>::print(os, t);
    return os;
}

// io functions
void FLUSH() {
    cout << flush;
}

void print() {
    cout << endl;
}
template <class Head, class... Tail>
void print(Head &&head, Tail &&...tail) {
    cout << head;
    if (sizeof...(Tail)) cout << spa;
    print(std::forward<Tail>(tail)...);
}

template <typename T, typename S>
void prisep(vector<T> &A, S sep) {
    int n = A.size();
    for (int i = 0; i < n; i++) {
        cout << A[i];
        if (i != n - 1) cout << sep;
    }
    cout << endl;
}
template <typename T, typename S>
void priend(T A, S end) {
    cout << A << end;
}
template <typename T>
void prispa(T A) {
    priend(A, spa);
}
template <typename T, typename S>
bool printif(bool f, T A, S B) {
    if (f)
        print(A);
    else
        print(B);
    return f;
}

template <class... T>
void inp(T &...a) {
    (cin >> ... >> a);
}

} // namespace io
using namespace io;

// read graph
vector<vector<int>> read_edges(int n, int m, bool direct = false, int indexed = 1) {
    vector<vector<int>> edges(n, vector<int>());
    for (int i = 0; i < m; i++) {
        INT(u, v);
        u -= indexed;
        v -= indexed;
        edges[u].push_back(v);
        if (!direct) edges[v].push_back(u);
    }
    return edges;
}
vector<vector<int>> read_tree(int n, int indexed = 1) {
    return read_edges(n, n - 1, false, indexed);
}

template <typename T = long long>
vector<vector<pair<int, T>>> read_wedges(int n, int m, bool direct = false, int indexed = 1) {
    vector<vector<pair<int, T>>> edges(n, vector<pair<int, T>>());
    for (int i = 0; i < m; i++) {
        INT(u, v);
        T w;
        inp(w);
        u -= indexed;
        v -= indexed;
        edges[u].push_back({v, w});
        if (!direct) edges[v].push_back({u, w});
    }
    return edges;
}
template <typename T = long long>
vector<vector<pair<int, T>>> read_wtree(int n, int indexed = 1) {
    return read_wedges<T>(n, n - 1, false, indexed);
}

// yes / no
namespace yesno {

// yes
inline bool yes(bool f = true) {
    cout << (f ? "yes" : "no") << endl;
    return f;
}
inline bool Yes(bool f = true) {
    cout << (f ? "Yes" : "No") << endl;
    return f;
}
inline bool YES(bool f = true) {
    cout << (f ? "YES" : "NO") << endl;
    return f;
}

// no
inline bool no(bool f = true) {
    cout << (!f ? "yes" : "no") << endl;
    return f;
}
inline bool No(bool f = true) {
    cout << (!f ? "Yes" : "No") << endl;
    return f;
}
inline bool NO(bool f = true) {
    cout << (!f ? "YES" : "NO") << endl;
    return f;
}

// possible
inline bool possible(bool f = true) {
    cout << (f ? "possible" : "impossible") << endl;
    return f;
}
inline bool Possible(bool f = true) {
    cout << (f ? "Possible" : "Impossible") << endl;
    return f;
}
inline bool POSSIBLE(bool f = true) {
    cout << (f ? "POSSIBLE" : "IMPOSSIBLE") << endl;
    return f;
}

// impossible
inline bool impossible(bool f = true) {
    cout << (!f ? "possible" : "impossible") << endl;
    return f;
}
inline bool Impossible(bool f = true) {
    cout << (!f ? "Possible" : "Impossible") << endl;
    return f;
}
inline bool IMPOSSIBLE(bool f = true) {
    cout << (!f ? "POSSIBLE" : "IMPOSSIBLE") << endl;
    return f;
}

// Alice Bob
inline bool Alice(bool f = true) {
    cout << (f ? "Alice" : "Bob") << endl;
    return f;
}
inline bool Bob(bool f = true) {
    cout << (f ? "Bob" : "Alice") << endl;
    return f;
}

// Takahashi Aoki
inline bool Takahashi(bool f = true) {
    cout << (f ? "Takahashi" : "Aoki") << endl;
    return f;
}
inline bool Aoki(bool f = true) {
    cout << (f ? "Aoki" : "Takahashi") << endl;
    return f;
}

} // namespace yesno
using namespace yesno;

} // namespace templates
using namespace templates;

void solve() {
    STRING(S);
    int n         = len(S);
    const int inf = 1 << 30;
    vec(int, dp, n + 1, inf);
    vec(int, num, n + 1, -1);
    dp[n]            = 0;
    vector<string> T = {
        "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII",
    };
    fori(i, n - 1, -1, -1) {
        fori(j, 1, 9) {
            if (i + len(T[j]) > n) continue;
            if (S.substr(i, len(T[j])) != T[j]) continue;

            if (chmin(dp[i], dp[i + len(T[j])] + 1)) {
                num[i] = j;
            }
        }
    }
    int s = 0;
    while (s < n) {
        priend(num[s], "");
        s += len(T[num[s]]);
    }
    print();
}

int main() {
    cin.tie(0)->sync_with_stdio(0);
    cout << fixed << setprecision(6);
    int t;
    t = 1;
    cin >> t;
    while (t--) solve();
    return 0;
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

3
II
IVI
VIIIIIV

output:

2
16
634

result:

ok 3 lines

Test #2:

score: 0
Accepted
time: 93ms
memory: 3540kb

input:

100000
VVIVVVVVII
VVVIIIIVVI
IVIIVIIIIV
VVVVVIIVVI
IIIVIVVVIV
VIVIIIIIVI
VVIIVVIVVI
IVVVIVVVVV
VIIVVVVIVV
VIIIIVVVVV
VVVVVVIVIV
VIVIIIVVVI
VIIIVIVVVI
VIIIIVVIIV
VIVVVIIVII
IIIIIVIIVI
IIIIVVVVII
IVIIVVIIVI
IVVIVVIIIV
IVVVIIIVIV
IIIIVIIIVV
VVVVVIVIIV
VVVIIIIVVV
VIVVIIIIVI
VIIIIIIIIV
VIVIVVVIVV
IVIIIVI...

output:

5545557
55846
1784
5555646
244554
6736
564546
45545555
6455545
845555
55555544
67456
74456
8464
54577
2376
34557
16476
45474
45744
13745
5555664
558455
54636
6334
5445545
1863
27645
34645
54746
55556455
46345
3746
74546
6633
5455544
738
4776
8666
1455445
555555556
44444
456445
5733
488
5455544
6336
...

result:

ok 100000 lines

Test #3:

score: 0
Accepted
time: 82ms
memory: 3608kb

input:

10000
VIVVIVIIIIIVVIIVIVVIVIIVVVIVIIVIIVIVVIIVVVIIIIVVIIIIIVVVVVVIIVVVIIVIIVVVIVVIIVIIIVIIIIIVVIIVIVVVVVVI
VVIVVVIIVIVVIVIIVVVVVVIVVIIIVIIIIVIVVIIIIIIVIVIIVVIVVIIVVIIVVIIIIIVVVVVIIVIIVVIIVIVVIVIVIIIVIVVIVVVI
VIVIVVVVIVVIIVVVIVIVVIVIIIIIIVVVVVVIVIVIIIVIIVIIIVVIVIVIVVIIIVIIVVVIVVVVVVVVVIIIVVIVIIIIIIVI...

output:

5466346446645676446458463455556457645547863464455556
5545644664555554884483664546464634555764644667445456
54455546455446734555566877454448645545555555746734454545
44734556845554555574444768446345555555554445555554646784
564455664454545747446344563763645557338664584555566
1455674645776454555557454674...

result:

ok 10000 lines

Test #4:

score: 0
Accepted
time: 80ms
memory: 3656kb

input:

1000
VIVVVIVVVVVVVIIVVIIIIVIVVIVIVIVIVVIIVIVIVIIIIVIVVVVVIIVIVIVIIIVVVIVVIIVIVVVVVVIIIVIVVVIIIIIIVVIIIIVIVIVVIVIVIVVIVVIVVVIIVIVVVVIVIIVIIIVVIIIVVIVIVIVVIIIVVIVVIIIIIVVIVIVIVVIIIIIVIVVVVIVVIVIIIVVVIIVIIVVVIIIVIVVVVVIVIIIVIIIIIVVIIVIIVVIVIVIVVIVIIIVVVVVVVVIIVIVIIVVVIVIIVVIVIIIVVVVVIVIVIIIVVVVVIIIIIII...

output:

545545555564844544447668445557667455464455557445734844454445454564455677474544474546345444634455546745764574455568634764544467455555576645664674555667455583455456464834564564844664455454554477477663344568457466648454558476334554583764554644544483645544633445464546784668646464644664454455778445556345...

result:

ok 1000 lines

Test #5:

score: 0
Accepted
time: 84ms
memory: 3720kb

input:

100
IVIVVVIIIIVVVIVIVIIVIIVIIIVVIVIVIVIVIIVVIIIIIVVVVVIIIIIVIVIVIVIIIVVIIIVVIIIVIVIIIVIIIIIIVIVIVIIIIVVIVVVVIVVIVVIVIIVVVIIIVVIIIIIIIVVIIIVVIVIVVIVVIVIVVIVIVIIIIIVIIIIVVIVIVVVIIIIVVVIIIIIVIIVVVVVIIVIVIVIVIIIVVVVVVIIVVIVIIIIVVVVVIVVIVVIVVIIIVIVVVIVVIVVIVIIIVIVIVIIVIVIVIVIIIIVIVVVIVVIIVIVVIIVIVIIVVVVI...

output:

445845667774666664634555736667474868836684545554546645748347454454544667384544584573645557666745555646845555454547445545468667666844554644766455645555454845845566645568456645555646634455845663863734568844455444634445446664446647454745744455555555584574744546466337783346458467347464744638666647844555...

result:

ok 100 lines

Test #6:

score: 0
Accepted
time: 82ms
memory: 4328kb

input:

10
IVIIIIVVIVVVVVVVIVIVIVVIIVIIIVVIIVIVIIIIIIVVIIVIIIVIIIVVIVVVVVVVIVIVVIIIVIVIVIVVVIIVIIVIVIIVVVIVVIVIVIVVIVVVVVVIIIVVIVVIVIVIVVVIVVVIVIVIIIIVVVIIIVVIIIVVVVIVIIIVIIVIIIIIVIIIVVIVVVIIIIIIIVIIVIVVVVIVIIVVIVIIVVIIVVIIIVIIIVVVIVVIVVIIVIVIIIVIVIIIVIIVVVIVVIIIVIVIIIVVIVIVVVVVVVIVIIVVVVVVIIVVVIVIVVVIIVIIV...

output:

184545555554447747673478745455555544744445776645545444545555745454445545668457474556877374545633644556646646487455454768686455486745445555566455556455445776455445446345545463764547476464555447445555545455744555645555674554748455736884564545545474557468364555554445586647455736454444667344556474555455...

result:

ok 10 lines

Test #7:

score: 0
Accepted
time: 81ms
memory: 3884kb

input:

1412
VVVVIIVVIVVIVIVVVVVIIIIIVIIVVVVVVIIIVIIVIIIVIVIVVIVVIVVIIVIVVIIVIVVVIVIIIIIVVVIVVIVIIIIVIIVVVVIVIVIIIIIVVVVVIVVVIVIVVVVVIIIVVIIIVIIVIIIVIVVIVIVVIVIIIIIIIIVIVIIIVIIVIVVVIVIVVVVIVVVIVIIIVIVVIVIVVVIVIVIIVVIIVVIVIIIIVIIIVVVIVVIIVVIVVVVVVIVVVVIIIIIIIIIIIVVVIIVIIIIVVVIVVVIIVIVIVVVVIIVVIIVVIIIVVVVIVII...

output:

555645454455573645555877444545464464456634554663645566634555545544555748774454467336864455445554567445445666464663745546454555554556333457845545644455646474556733366454554558645454546464564455554554587645545554554555664444556457764556464555556745644545645564644564457347455555684444564554646455566457...

result:

ok 1412 lines

Test #8:

score: 0
Accepted
time: 77ms
memory: 4244kb

input:

10
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...

output:

233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333...

result:

ok 10 lines

Test #9:

score: 0
Accepted
time: 77ms
memory: 4216kb

input:

10
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...

output:

133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333...

result:

ok 10 lines

Extra Test:

score: 0
Extra Test Passed