結果

問題 No.3204 Permuted Integer
ユーザー V_Melville
提出日時 2025-07-18 21:52:26
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 209 ms / 2,000 ms
コード長 1,735 bytes
コンパイル時間 3,139 ms
コンパイル使用メモリ 286,916 KB
実行使用メモリ 7,720 KB
最終ジャッジ日時 2025-07-18 23:38:50
合計ジャッジ時間 7,573 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 26
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>

using namespace std;

int main() {
    unordered_map<long long, long long> mp;
    for (int k = 1; k <= 10; k++) {
        long long low = 1;
        if (k > 1) {
            low = 1;
            for (int i = 0; i < k-1; i++) {
                low *= 10;
            }
        }
        long long high = low * 10;
        long long r_min = (long long)sqrt((double)low);
        if (r_min * r_min < low) {
            r_min++;
        }
        long long r_max = (long long)sqrt((double)(high - 1));

        for (long long r = r_min; r <= r_max; r++) {
            long long X = r * r;
            vector<int> count_x(10, 0);
            long long temp = X;
            while (temp) {
                count_x[temp % 10]++;
                temp /= 10;
            }

            for (int t = 0; t <= 10 - k; t++) {
                vector<int> count_new = count_x;
                count_new[0] += t;
                long long state = 0;
                for (int i = 0; i < 10; i++) {
                    state = state * 11 + count_new[i];
                }
                if (mp.find(state) == mp.end()) {
                    mp[state] = X;
                }
            }
        }
    }

    int t;
    cin >> t;
    
    while (t--) {
        int N;
        cin >> N;
        vector<int> cnt(10);
        long long temp = N;
        while (temp) {
            cnt[temp % 10]++;
            temp /= 10;
        }
        long long state_n = 0;
        for (int i = 0; i < 10; i++) {
            state_n = state_n * 11 + cnt[i];
        }
        if (mp.find(state_n) != mp.end()) {
            cout << mp[state_n] << endl;
        } else {
            cout << -1 << endl;
        }
    }
    
    return 0;
}
0