@[Wens](/user/213196)
您的代码我简单做了些修改,不知道是哪个地方导致的错误/kk
反正是过了/kk
```cpp
#include<bits/stdc++.h>
#define M 600
#define S 2100 // ¿ª´óÊý×é
using namespace std;
int n,c,m,tot,ans;
int f[S];
bool vis[S];
struct node{
int l,r;
}line[S];
int main(){
cin>>n>>c>>m;
for(int i=1;i<=m;++i){
int x;
cin>>x;
vis[x]=1;
}
for(int i=1;i<=c;++i){
if(vis[i]){
++ans;
if(!vis[i-1])
{
tot++; // ·ÖÁѳöÀ´tot¼ÆÊý
line[tot].l=line[tot].r=i;
}
if(vis[i-1])
++line[tot].r;
}
}
for(int i=1;i<=tot-1;++i)f[i]=line[i+1].l-line[i].r-1;
sort(f+1,f+tot);
int kkk=tot - 1;
for(int i=1;i<=tot-1&&kkk>=n;++i) // ÖØËãkkk£¨Ã²ËÆûɶ×÷ÓÃ
{
ans+=f[i];
kkk--;
}
cout<<ans<<endl;
return 0;
}
```
by Maxmilite @ 2020-11-03 08:13:38
中文糊了...
```cpp
#include<bits/stdc++.h>
#define M 600
#define S 2100 // Expand the Array
using namespace std;
int n,c,m,tot,ans;
int f[S];
bool vis[S];
struct node{
int l,r;
}line[S];
int main(){
cin>>n>>c>>m;
for(int i=1;i<=m;++i){
int x;
cin>>x;
vis[x]=1;
}
for(int i=1;i<=c;++i){
if(vis[i]){
++ans;
if(!vis[i-1])
{
tot++; // Let "tot" add 1 independently
line[tot].l=line[tot].r=i;
}
if(vis[i-1])
++line[tot].r;
}
}
for(int i=1;i<=tot-1;++i)f[i]=line[i+1].l-line[i].r-1;
sort(f+1,f+tot);
int kkk=tot - 1;
for(int i=1;i<=tot-1&&kkk>=n;++i) // It seems that there is no use to modify kkk :(
{
ans+=f[i];
kkk--;
}
cout<<ans<<endl;
return 0;
}
```
by Maxmilite @ 2020-11-03 08:15:45
为什么line[++tot],改成++tot,line[tot],就行了???
奇妙的错误
by Wens @ 2020-11-03 09:36:50
@[Wens](/user/213196) 请不要让++的变量在同一语句中出现多次
by gxy001 @ 2020-11-03 10:40:44
这样的运算顺序是UB
by gxy001 @ 2020-11-03 10:42:00
哦,谢谢大佬赐教
by Wens @ 2020-11-03 11:03:55