#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;
ifstream fin("C:\\data10.in");
struct node
{
node(int beg=0,int end=0):startpos(beg),endpos(end){}
node& operator=(const node& nd)
{
startpos=nd.startpos;
endpos=nd.endpos;
return *this;
}
int startpos;
int endpos;
};
int K,N,M;
node interval[1000];
int billboard[1000];
void sort()
{
for(int i=1;i<N;++i)
{
for(int j=i;j>0;--j)
{
node nd;
if(interval[j].endpos<interval[j-1].endpos)
{
nd=interval[j];
interval[j]=interval[j-1];
interval[j-1]=nd;
}
else if(interval[j].endpos==interval[j-1].endpos)
{
if(interval[j].startpos<interval[j-1].startpos)
{
nd=interval[j];
interval[j]=interval[j-1];
interval[j-1]=nd;
}
else
break;
}
}
}
}
void Init()
{
fin>>K>>N;
int beg,end;
M=0;
for(int i=0;i<1000;++i)
billboard[i]=0;
for(int i=0;i<N;++i)
{
fin>>beg>>end;
if(beg>end)
{
int temp=beg;
beg=end;
end=temp;
}
node nd(beg,end);
interval[i]=nd;
}
sort();
}
void FillBillBoard()
{
for(int i=0;i<N;++i)
{
int cnt=0;
if(i==0)
{
for(int j=interval[0].endpos;j>=interval[0].startpos;--j)
{
billboard[j]=1;
++cnt;
++M;
if(cnt>=K)
break;
}
}
//i!=0的情况本可以合并,但出于利益最大化的角度考虑,将i=N-1和i!=N-1分开来写,以更好地模拟实际情况
else if(i==N-1)
{
for(int j=interval[j].startpos;j<=interval[j].endpos;++j)
{
if(billboard[j]==1)
{
++cnt;
if(cnt>=K)
break;
}
}
if(cnt>=K)
continue;
for(int j=interval[j].startpos;j<=interval[j].endpos;++j)
{
if(billboard[j]==0)
{
billboard[j]=1;
++cnt;
++M;
if(cnt>=K)
break;
}
}
}
else
{
for(int j=interval[i].startpos;j<=interval[i].endpos;++j)
{
if(billboard[j]==1)
++cnt;
}
if(cnt>=K)
continue;
for(int j=interval[i].endpos;j>=interval[i].startpos;--j)
{
if(billboard[j]==0)
{
billboard[j]=1;
++cnt;
++M;
if(cnt>=K)
break;
}
}
}
}
}
void print()
{
cout<<M<<endl;
for(int i=1;i<interval[N-1].endpos;++i)
{
if(billboard[i]==1)
cout<<i<<endl;
}
}
int main()
{
Init();
FillBillBoard();
print();
system("pause");
return 0;
}
Advertisement
最新推荐文章于 2020-12-09 15:04:59 发布