結果
| 問題 | 
                            No.443 GCD of Permutation
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2024-01-23 00:01:30 | 
| 言語 | C++17(clang)  (17.0.6 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 806 ms / 1,000 ms | 
| コード長 | 1,075 bytes | 
| コンパイル時間 | 5,561 ms | 
| コンパイル使用メモリ | 165,836 KB | 
| 実行使用メモリ | 6,820 KB | 
| 最終ジャッジ日時 | 2024-12-20 17:54:18 | 
| 合計ジャッジ時間 | 9,225 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge2 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 28 | 
ソースコード
#include "bits/stdc++.h"
using namespace std;
#define int long long
bool divisible(string& s, int x) {
    int rem = 0;
    for (auto c : s) {
        rem = (rem * 10 + c - '0') % x;
    }
    return rem == 0;
}
void solve(){
    string s;
    cin >> s;
    set<int> st(s.begin(), s.end());
    if (st.size() == 1) {
        cout << s << "\n";
        return;
    }
    int g = 0;
    for (auto i : s) {
        for (auto j : s) {
            if (i < j) {
                g = __gcd(g, 9LL * (j - i));
            }
        }
    }
    vector<int> divisors;
    for (int i = 1; i * i <= g; i++) {
        if (g % i == 0) {
            divisors.push_back(i);
            if (i != g / i)
                divisors.push_back(g / i);
        }
    }
    sort(divisors.rbegin(), divisors.rend());
    for (auto x : divisors) {
        if (divisible(s, x)) {
            cout << x << "\n";
            return;
        }
    }
}
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    
    int T = 1;
    // cin >> T;
    while(T--) solve();
    return 0;
}