結果
| 問題 | No.14 最小公倍数ソート |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2014-11-01 06:23:27 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
CE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,670 bytes |
| コンパイル時間 | 654 ms |
| コンパイル使用メモリ | 64,248 KB |
| 最終ジャッジ日時 | 2024-11-14 18:55:30 |
| 合計ジャッジ時間 | 1,310 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
main.cpp: In function ‘std::vector<int> divis_list(unsigned int)’:
main.cpp:12:18: error: ‘sqrt’ was not declared in this scope; did you mean ‘rt’?
12 | int rt = int(sqrt((double)num));
| ^~~~
| rt
ソースコード
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <cstring>
using namespace std;
#define REP(i, n) for(int(i)=0;(i)<(n);++(i))
void rc(int v,int mn,int mx){if(v<mn||mx<v){cerr<<"error"<<endl;}}
vector<int> divis_list(unsigned int num){
vector<int> divis_list;
int rt = int(sqrt((double)num));
for(int i = 1; i <= rt; i++){
if(num % i == 0){
divis_list.push_back(i);
if(num / i != i) divis_list.push_back(num / i);
}
}
return divis_list;
}
const int MAX = 10000;
int N, a[MAX+1];
vector<int> divs[MAX+1];
struct comp{ bool operator()(int i, int j){ return (a[i]!=a[j]) ? a[i]<a[j] : i<j; } };
set<int, comp> divsgrp[MAX+1];
int main(){
do { cin.tie(0); ios_base::sync_with_stdio(false); } while(0);
cin >> N; rc(N,1,10000);
REP(i,N){
cin >> a[i]; rc(a[i],1,10000);
divs[i] = divis_list(a[i]);
if(i > 0) for(auto &d : divs[i]) divsgrp[d].insert(i);
}
vector<int> result;
int prev = 0;
result.push_back(a[prev]);
REP(i,N-1){
int minval = 0, minidx = -1;
for(auto &d : divs[prev]){
if(divsgrp[d].empty()) continue;
auto j = *divsgrp[d].begin();
int cm = a[j] / d;
if(minidx < 0 || minval > cm || (minval == cm && a[minidx] > a[j])){
minval = cm, minidx = j;
}
}
prev = minidx;
result.push_back(a[prev]);
for(auto &d : divs[prev]) divsgrp[d].erase(prev);
}
REP(i,N) cout << result[i] << (i==N-1?"\n":" ");
return 0;
}