QOJ.ac

QOJ

Time Limit: 0.5 s Memory Limit: 512 MB Total points: 100 Hackable ✓

#15543. 项链

Statistics

Bob 送给 Alice 一条项链作为她的生日礼物。这条项链有 $N$ 个水晶,其中 $M$ 个深得她的喜爱。形式化地,标签为 $1..N$ 的水晶按顺序串成一个圆环。而那些深得她喜爱的水晶被标记为 $n_1, n_2, \dots, n_M$。

Alice 希望将项链分成 $M$ 段。她让 Bob 将项链切成 $M$ 段。每一段都应该由原项链中连续的一段水晶组成(即水晶的标签是连续的,允许 $1$ 紧跟在 $N$ 后面),并且必须恰好包含一个深得 Alice 喜爱的水晶。显然,每个水晶必须恰好属于其中一段。

然而,切分后的项链如果有一段过长,就无法贴合 Alice 纤细的脖子。因此,她想知道,在所有满足要求的切分方案中,切分出的最长项链段的最小长度是多少。她希望你来回答这个问题。

输入格式

输入数据的第一行包含 $2$ 个整数 $N$ 和 $M$($1 \le M \le N < 10^{18}$ 且 $M \le 10^6$)。

第二行包含 $M$ 个整数,其中第 $i$ 个整数表示 $n_i$。$n_i$ 按升序给出。

输出格式

你需要在一行中输出你的答案。

样例

输入 1

10 4
2 5 6 8

输出 1

3

说明

对于样例:你可以将项链切分为 $[1, 3], [4, 5], [6, 7], [8, 10]$。

考虑到数据规模巨大,这里提供了一种帮助快速输入的方法:

#define gc()(is==it?it=(is=in)+fread(in,1,Q,stdin),(is==it?EOF:*is++):*is++)
const int Q=(1<<24)+1;
char in[Q],*is=in,*it=in,c;
void read(long long &n){
    for(n=0;(c=gc())<'0'||c>'9';);
    for(;c<='9'&&c>='0';c=gc())n=n*10+c-48;
}

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.