結果
| 問題 |
No.370 道路の掃除
|
| コンテスト | |
| ユーザー |
yuma25689
|
| 提出日時 | 2016-06-02 00:43:13 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,043 bytes |
| コンパイル時間 | 532 ms |
| コンパイル使用メモリ | 66,744 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-14 16:58:08 |
| 合計ジャッジ時間 | 1,406 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 WA * 1 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair< int, int > PII;
void solve() {
int N,M;
cin >> N >> M;
vector< int > a(M);
vector< int > l;
vector< int > r;
for( int i=0; i<M; i++ ) {
cin >> a[i];
if( a[i] < 0 ) l.emplace_back(-a[i]);
else r.emplace_back(a[i]);
}
// この値は、各項目の移動距離ではあるが、それと同時に最小距離でもある?
// そうするために、0を追加
l.emplace_back(0);
r.emplace_back(0);
sort( l.begin(), l.end() );
sort( r.begin(), r.end() );
const int INF = 1e9;
vector< int > dp(M,INF);
for( int i=0; i<=N; i++ ) {
if( i < l.size() && N-i < r.size() ) {
dp[i] = min( l[i]*2 + r[N-i], l[i] + r[N-i]*2 );
}
}
int res = INF;
for( int i=0; i<=N; i++ ) {
res = min( res, dp[i] );
}
cout << res << endl;
return;
}
int main() {
solve();
return 0;
}
yuma25689