結果
問題 |
No.3204 Permuted Integer
|
ユーザー |
![]() |
提出日時 | 2025-07-18 22:26:16 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 269 ms / 2,000 ms |
コード長 | 2,400 bytes |
コンパイル時間 | 3,060 ms |
コンパイル使用メモリ | 301,516 KB |
実行使用メモリ | 7,716 KB |
最終ジャッジ日時 | 2025-07-18 23:40:17 |
合計ジャッジ時間 | 8,052 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 26 |
ソースコード
#include <bits/stdc++.h> #include <iostream> #include <vector> #include <string> #include <stack> #include <algorithm> #include <iomanip> #include <chrono> #pragma GCC target ("avx") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #define rep(i,n) for (ll i = 0;i < (ll)(n);i++) #define Yes cout << "Yes" << "\n"// YESの短縮 #define No cout << "No" << "\n"// NOの短縮 #define rtr0 return(0)//return(0)の短縮 #define gyakugen(x) modpow(x,mod - 2,mod); #define agyakugen(x) modpow(x,amod - 2,amod); #define st(A) sort(A.begin(),A.end()); #define rst(A) sort(A.rbegin(),A.rend()); using namespace std; //using namespace ranges; using ll = long long;//63bit型整数型 using ld = long double;//doubleよりも長い値を保存できるもの using ull = unsigned long long;//符号がない64bit型整数 ll mod = 998244353; ll amod = 1000000007; ll MINF = -5000000000000000000; ll INF = 5000000000000000000; ll inf = 2000000000; ll minf = -2000000000; ll BAD = -1; ll zero = 0; ld EPS = 1e-10; int main(){ ll T; cin >> T; map<tuple<ll,ll,ll,ll,ll,ll,ll,ll,ll,ll>,ll>ans; for(int i = 0;i*i<=1e9;i++){ string s = to_string(i*i); tuple<ll,ll,ll,ll,ll,ll,ll,ll,ll,ll>X; for(int ii = 0;ii<s.size();ii++){ ll x = s[ii]-'0'; if(x==0)get<0>(X)++; if(x==1)get<1>(X)++; if(x==2)get<2>(X)++; if(x==3)get<3>(X)++; if(x==4)get<4>(X)++; if(x==5)get<5>(X)++; if(x==6)get<6>(X)++; if(x==7)get<7>(X)++; if(x==8)get<8>(X)++; if(x==9)get<9>(X)++; } if(!ans.count(X))ans[X]=min((ll)(i*i),INF); } //cout << ans[{0,0,0,0,0,0,0,0,0,0}]<<"\n"; while(T--){ ll N; cin >> N; string s = to_string(N); tuple<ll,ll,ll,ll,ll,ll,ll,ll,ll,ll>Y ={0,0,0,0,0,0,0,0,0,0}; for(int ii = 0;ii<s.size();ii++){ ll x = s[ii]-'0'; if(x==0)get<0>(Y)++; if(x==1)get<1>(Y)++; if(x==2)get<2>(Y)++; if(x==3)get<3>(Y)++; if(x==4)get<4>(Y)++; if(x==5)get<5>(Y)++; if(x==6)get<6>(Y)++; if(x==7)get<7>(Y)++; if(x==8)get<8>(Y)++; if(x==9)get<9>(Y)++; } //cout << get<0>(Y)<<" "<<get<1>(Y)<<"\n"; ll res = INF; ll p = get<0>(Y); for(int i = p;i>=0;i--){ get<0>(Y)=i; if(ans.count(Y))res = min(ans[Y],res); } if(res==INF)cout<<-1<<"\n"; else cout<<res<<"\n"; } }