/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 2ms 532.0 KiB
#2 Accepted 2ms 532.0 KiB
#3 Accepted 7ms 532.0 KiB
#4 Accepted 8ms 640.0 KiB
#5 Accepted 30ms 772.0 KiB
#6 Accepted 6ms 532.0 KiB
#7 Accepted 11ms 532.0 KiB
#8 Accepted 19ms 532.0 KiB
#9 Accepted 94ms 1.551 MiB
#10 Accepted 45ms 1.234 MiB
#11 Accepted 60ms 1.18 MiB
#12 Accepted 107ms 1.496 MiB

Code

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <set>
//#include <queue>
//#include <numeric>
#include <cassert>

using namespace std;

#ifdef LOCAL_DEBUG
#include <local_debug.h>
#define DEBUG(...) DBG2::cprint(#__VA_ARGS__, __LINE__, __VA_ARGS__)
#else
#define DEBUG(...)
#endif

#define SZ(a) int((a).size())
#define REP(i,n) for(int i=0,_n=(n);i<_n;++i)
#define FOR(i,a,b) for(int i=(a),_b=(b);i<=_b;++i)

using llong = long long;
using VI = vector<int>;
using VVI = vector<VI>;
using II = pair<int,int>;

const int INF = 1e9 + 123;

const string SERIOUS = "SERIOUSOJ";
string T;
VVI memo;
int go(int n, int mask) {
   if (mask == (1<<SZ(SERIOUS))-1) {
      return 0;
   }
   if (n >= SZ(T))
      return INF;
   int& res = memo[n][mask];
   if (res < 0) {
      res = go(n+1, mask);
      REP(j, SZ(SERIOUS)) {
         if (0 == (mask & (1<<j))) {
            int dist = abs(SERIOUS[j] - T[n]);
            if (dist > 26 - dist)
               dist = 26 - dist;
            int cur = dist + go(n + 1, mask | (1<<j));
            res = min(res, cur);
         }
      }
   }
   return res;
}

int solve(const string& S) {
   VI freq(26);
   for (char c : S)
      freq[c-'A']++;

   T.clear();
   REP(k, 26)
      T += string(min(freq[k], 9), 'A'+k);
   DEBUG(T);

   memo = VVI(T.size(), VI(1<<SZ(SERIOUS), -1));
   int res = go(0, 0);
   return res;
}

int main(int argc, char* argv[]) {
   ios_base::sync_with_stdio(false); 
   cin.tie(nullptr);

   int TC;
   cin >> TC;
   FOR(tc, 1, TC) {
      string S;
      cin >> S;
      int res = solve(S);
      cout << res << '\n';
   }

   return 0;
}

Information

Submit By
Type
Submission
Problem
P1188 The Mysty Lock
Contest
Brain Booster #9
Language
C++17 (G++ 13.2.0)
Submit At
2025-04-06 17:46:25
Judged At
2025-04-06 17:46:25
Judged By
Score
100
Total Time
107ms
Peak Memory
1.551 MiB