結果

問題 No.14 最小公倍数ソート
ユーザー なおなお
提出日時 2014-11-01 06:23:27
言語 C++11
(gcc 11.4.0)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,670 bytes
コンパイル時間 420 ms
コンパイル使用メモリ 64,516 KB
最終ジャッジ日時 2024-04-27 02:05:47
合計ジャッジ時間 1,164 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、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

ソースコード

diff #

#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;
}
0