/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 532.0 KiB
#2 Accepted 1ms 532.0 KiB
#3 Accepted 1ms 532.0 KiB
#4 Accepted 1ms 320.0 KiB
#5 Accepted 2ms 532.0 KiB
#6 Accepted 2ms 536.0 KiB
#7 Accepted 2ms 536.0 KiB
#8 Accepted 2ms 532.0 KiB
#9 Accepted 3ms 532.0 KiB
#10 Accepted 5ms 532.0 KiB
#11 Accepted 5ms 532.0 KiB
#12 Accepted 5ms 532.0 KiB
#13 Accepted 5ms 532.0 KiB
#14 Accepted 5ms 328.0 KiB
#15 Accepted 5ms 532.0 KiB

Code

#include <vector>
#pragma GCC target ("avx2")
#pragma GCC optimize ("O3")
#pragma GCC optimize ("unroll-loops")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

using namespace std;
using namespace __gnu_pbds;

#define A(a) begin(a),end(a)
#define pb push_back
#define pp partition_point
#define K first
#define V second
#define krep(i,a,b) for (int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int) (size(x))

template <typename T>
std::istream& operator >>(std::istream& input, std::pair <T, T> & data)
{
    input >> data.first >> data.second;
    return input;
}
template <typename T>
std::istream& operator >>(std::istream& input, std::vector<T>& data)
{
    for (T& x : data)
        input >> x;
    return input;
}
template <typename T>
std::ostream& operator <<(std::ostream& output, const pair <T, T> & data)
{
    output << "(" << data.first << "," << data.second << ")";
    return output;
}
template <typename T>
std::ostream& operator <<(std::ostream& output, const std::vector<T>& data)
{
    for (const T& x : data)
        output << x << " ";
    return output;
}
struct chash {
    static uint64_t splitmix64(uint64_t x) {
        // http://xorshift.di.unimi.it/splitmix64.c
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }

    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};
template<typename T, typename U> using pb_map = gp_hash_table<T, U, chash>;
template<typename T> using pb_set = gp_hash_table<T, null_type, chash>;
using ll = long long;
using ld = long double;
using vi = vector<int>;
using vii = vector<vector<int>>;
using vll =  vector<ll>;
using pll = pair<ll,ll>;
using pii = pair<int,int>;
template<class T> bool ckmin(T& a, const T& b) { return b < a ? (a = b, 1) : 0; }
template<class T> bool ckmax(T& a, const T& b) { return a < b ? (a = b, 1) : 0; }
inline long long Bit(long long mask, long long bit) { return (mask >> bit) & 1; }


constexpr ll NN = 2e5, M = 1000000007, L = 20;

void run()
{
    string s; cin >> s;
    ll n = (int)s.size();
    array<ll,26> cnt{}; for(char c : s) cnt[c-'a']++;
    string ans;
    auto check = [&](char c){
        int idx = c-'a';
        if(cnt[idx]==0)return false;
        int sm = accumulate(A(cnt),0);
        int mx = *max_element(A(cnt));
        if(cnt[idx]==mx) return true; //always allowed to place the max after initial conditions
        sm -- ; //pretend we placed it
        return mx <= (sm+1)/2;
    };

    int sm = accumulate(A(cnt),0);
    int mx =*max_element(A(cnt));
    if(mx > (sm+1)/2) return void(cout << "-1\n");

    for(int i=0;i<n;i++){
        for(char c = 'a';c<='z';c++){
            if(i and c==ans.back()) continue;
            if(check(c)){
                ans+=c,cnt[c-'a']--;
                break;
            }
        }
    }

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

int main()
{
    //KING OF THE WORLD...... U.W.T.B
    //nick belov always reads the entire problem statement.
    cin.tie(0);
    ios_base::sync_with_stdio(false);
    int t; cin>>t; while(t--) run();
}

Information

Submit By
Type
Submission
Problem
P1209 B. Rearrange the String
Contest
Educational Round 1
Language
C++17 (G++ 13.2.0)
Submit At
2025-07-14 15:42:41
Judged At
2025-07-14 15:42:41
Judged By
Score
100
Total Time
5ms
Peak Memory
536.0 KiB