結果
| 問題 |
No.370 道路の掃除
|
| コンテスト | |
| ユーザー |
nanophoto12
|
| 提出日時 | 2016-05-16 00:34:26 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,596 bytes |
| コンパイル時間 | 615 ms |
| コンパイル使用メモリ | 82,512 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-14 16:54:19 |
| 合計ジャッジ時間 | 1,510 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 34 |
ソースコード
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <set>
#include <queue>
#include <string>
#include <iomanip>
#include <map>
using namespace std;
#define ll long long int
#define ti4 tuple<int,int,int,int>
#define pii pair<ll,ll>
int main()
{
int N, M;
cin >> N >> M;
int d[20003];
fill(d, d + 20003, 0);
const int center = 10001;
for(int i = 0;i < M;i++)
{
int p;
cin >> p;
d[p + center] = 1;
}
int b[20003];
for(int i = 0;i < 20003;i++)
{
b[i] = b[i-1] + d[i];
}
int mindist = 10000000;
int left = 0;
int right = 0;
int current = 0;
while(left < 20002)
{
while(current < N && right < 20003)
{
right++;
current = b[right] - b[left];
}
if(right == 20003)
{
break;
}
while(current == N && left < right)
{
int ldist = left + 1 - center;
int rdist = right - center;
if(ldist * rdist >= 0)
{
mindist = min(mindist, max(abs(ldist), (rdist)));
}
else
{
mindist = min(mindist, min(abs(ldist), (rdist)) + rdist - ldist);
}
if(mindist == 0)
{
//cout << left << "," << right;
}
left++;
current = b[right] - b[left];
}
if(current == N)
{
right++;
}
}
cout << mindist << endl;
return 0;
}
nanophoto12