ECR45-problemB

Правка en2, от zys23736748, 2018-06-11 11:06:43

简单排序+贪心。 一开始用vector做不知道为什么超时。 后改贪心,其中两种情况没有返回 i=j-1;卡了半天。

#include <iostream>
#include <algorithm>
#include <cmath>

using namespace std;
#define MAXN 100010

int Micro[MAXN*2];
int n,K;
int tim=0;

bool cmp(int a, int b)
{
    return a<b;
}

int main()
{

   // freopen("in.txt","r",stdin);

    cin>>n>>K;
    for(int i=0;i<n;i++)
        cin>>Micro[i];

   // for(int i=0;i<n;i++){cout<<micro[i]<<" ";}cout<<endl;

    sort(Micro,Micro + n,cmp);

   // for(int i=0;i<n;i++){cout<<Micro[i]<<" ";}cout<<endl;


    int flag = 0;
    int ans=0;

    for(int i=0;i<n;i++)
    {
        int j=i+1;

        while( Micro[i] == Micro[j] )
        {
        //    cout<<"t:"<<tim++<<endl;
            j++;

            if( j == n) i=j-1;
            
            if(Micro[j] <= Micro[i] + K && Micro[i]!=Micro[j] && j<n )
            {
          //   cout<<"j:"<<i<<" "<<j<<endl;
            for(int t=i;t<j-1;t++) Micro[t]=0;
            i=j-1;
           // ans++;
            }
            else if (Micro[j] > Micro[i] + K)   i = j-1;
        }

        if(Micro[j] <= Micro[i] + K && j<n ){
            Micro[i] = 0;
        }

     //   cout<<"t:"<<tim++<<endl;

     // for(int p=0;p<nn;p++){cout<<micro[p]<<" ";}cout<<endl;
    }

    for(int i=0;i<n;i++){
        if(Micro[i]!=0) ans++;
    }
    cout<<ans<<endl;

    return 0;
}

参考其他代码,有直接用pos记录upper_loader返回值的做法。 另外没有清零,直接对答案进行记录。 代码简洁了很多。

Теги education

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
en3 Английский zys23736748 2018-06-11 11:09:15 401
en2 Английский zys23736748 2018-06-11 11:06:43 30
en1 Английский zys23736748 2018-06-10 21:26:43 1485 Initial revision (published)