結果
| 問題 | No.14 最小公倍数ソート |
| コンテスト | |
| ユーザー |
cureskol
|
| 提出日時 | 2022-05-28 17:57:09 |
| 言語 | C++14 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 151 ms / 5,000 ms |
| コード長 | 1,391 bytes |
| 記録 | |
| コンパイル時間 | 2,478 ms |
| コンパイル使用メモリ | 201,564 KB |
| 実行使用メモリ | 8,192 KB |
| 最終ジャッジ日時 | 2024-09-20 23:22:51 |
| 合計ジャッジ時間 | 6,302 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 20 |
ソースコード
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
#ifdef __LOCAL
#include <debug>
#else
#define debug(...) void(0)
#endif
#define REP(i,n) for(int i=0;i<(n);i++)
#define ALL(v) v.begin(),v.end()
template<typename T>
istream& operator>>(istream&is,vector<T>&v){
for(T&p:v)is>>p;
return is;
}
template<typename T>
ostream& operator<<(ostream&os,const vector<T>&v){
if(&os==&cerr)os<<"[";
for(int i=0;i<v.size();i++){
os<<v[i];
if(i+1<v.size())os<<(&os==&cerr?",":" ");
}
if(&os==&cerr)os<<"]";
return os;
}
template<typename T>
bool chmin(T &a,T b){
return (a>b&&(a=b,true));
}
vector<vector<int>> pr(10000);
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
for(int i=1;i<=10000;i++)
for(int j=i;j<=10000;j+=i)
pr[j].push_back(i);
for(int i=1;i<=10000;i++)reverse(ALL(pr));
int n;cin>>n;
vector<int> ans(n);
cin>>ans[0];
map<int,set<int>> mp;
map<int,int> memo;
REP(_,n-1){
int b;cin>>b;
if(memo[b]++)continue;
for(int p:pr[b])mp[p].insert(b);
}
for(int i=1;i<n;i++){
int mn=1e9,val;
for(int p:pr[ans[i-1]]){
if(!mp.count(p))continue;
int A=*mp[p].begin();
if(chmin(mn,ans[i-1]*A/p))val=A;
}
REP(_,memo[val])ans[i++]=val;i--;
for(int p:pr[val]){
mp[p].erase(val);
if(!mp[p].size())mp.erase(p);
}
}
cout<<ans<<endl;
}
cureskol