Advertisement

来源:互联网 发布:lol什么意思网络用语 编辑:程序博客网 时间:2024/04/28 11:39
#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;}

0 0
原创粉丝点击