这个方法卡在了42test;
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int a,b,c,i,j,sum=0,d,k,g;
int n[100010];
cin >> a >> b >> c;
memset(n,0,sizeof(n));
for(i=1; i<=b; i++)
{
cin >> d;
n[d]=1;
}
g=0;
for(i=1; i<=a-c+1;i++)
{
k=0;
for(j=i; j<=i+c-1; j++)
{
if(n[j]==1)
{
if(k==0)
{
g=j;
}
k++;
}
}
if(k<2)
{
if(k==0)
{
n[i+c-1]=1;
n[i+c-2]=1;
sum=sum+2;
i=i+c-2;
}
if(k==1)
{
if(n[i+c-1]!=1)
{
n[i+c-1]=1;
}
else
{
n[i+c-2]=1;
}
sum=sum+1;
i=g;
}
}
else
{
i=g;
}
}
cout << sum;
return 0;
}
这是AC的
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int a,b,c,i,j,sum=0,d,k,g;
int n[100010];
cin >> a >> b >> c;
memset(n,0,sizeof(n));
for(i=1; i<=b; i++)
{
cin >> d;
n[d]=1;
}
g=0;
for(i=1; i<=a-c+1;i++)
{
k=0;
for(j=i; j<=i+c-1; j++)
{
if(n[j]==1)
{
if(k==0)
{
g=j;
}
k++;
}
}
if(k<2)
{
if(k==0)
{
n[i+c-1]=1;
n[i+c-2]=1;
sum=sum+2;
}
if(k==1)
{
if(n[i+c-1]!=1)
{
n[i+c-1]=1;
}
else
{
n[i+c-2]=1;
}
sum=sum+1;
}
}
else
{
i=g;
}
}
cout << sum;
return 0;
}