2016-06-27 1 views
-5
//BYTESE2 

#include<iostream> 
#include<vector> 
#include<algorithm> 
#include<cmath> 
using namespace std; 

typedef long long ll; 

bool compare(const ll &i, const ll &j) 
{ 
return (abs(i) < abs(j)); 
} 

int main() 
{ 
std::cout.sync_with_stdio(false); 
int t,n; 
cin>>t; 
while(t--) 
{ 
    vector <ll> v; 
    cin>>n; 
    if(n==0) 
    { 
     cout<<"0\n"; 
     continue; 
    } 
    ll start, end, i, j; 
    j=0; 
    for(i=0;i<n;i++) 
    { 
     cin>>start>>end; 
     v.push_back(start * 1); 
     v.push_back(end * -1); 
    } 
    sort(v.begin(), v.end(), compare); 
    int c=0, max=0; 
    vector <ll>::iterator it = v.begin(); 
    while(it != v.end()) 
    { 
     if(*it > 0) 
      c++; 
     else 
      c--; 
     if(max < c) 
      max = c; 
     it++; 
    } 
    cout<<max<<endl; 
} 
return 0; 
} 

Использование переменной для хранения текущего значения. танцоров в зале. Для каждого выхода я вычитаю из переменной. Я пробовал в некоторых тестах, он работает нормально. Но при подаче он говорит НЕПРАВИЛЬНЫЙ ОТВЕТ!BYTSE2 - spoj: Пожалуйста, предложите, что я могу делать неправильно?

Я пробовал так много способов сделать этот вопрос, но напрасно! Пожалуйста, предложите, что я могу делать неправильно! Ссылка на вопрос: http://www.spoj.com/problems/BYTESE2/

ответ

0

Код кажется прекрасным для меня. Понравился подход, а также сохранить время начала как положительное и конечное время как отрицательное, но кажется, что в данной задаче время не всегда положительно, то есть, что Хагрид, возможно, начал записывать время с некоторого отрицательного числа, поэтому в в этом случае время начала и окончания может быть отрицательным, что дало бы неправильный ответ при таком подходе. Таким образом, вам нужно будет использовать дополнительную память для хранения, является ли это начальным или конечным временем. Я отредактировал ваш код к следующему, и он был принят.

#include<iostream> 
#include<vector> 
#include<algorithm> 

using namespace std; 

bool compare(const pair<int, bool> &i, const pair<int, bool> &j) 
{ 
    return (i.first < j.first); 
} 

int main() 
{ 
    int t,n; 
    vector <pair<int, bool> > v; 
    cin>>t; 
    while(t--) 
    { 
     cin>>n; 

     int start, end, i, j; 
     j=0; 
     for(i=0;i<n;i++) 
     { 
      cin>>start>>end; 
      pair <int, bool> p1 (start, true); 
      pair<int, bool> p2 (end, false); 
      v.push_back(p1); 
      v.push_back(p2); 
     } 
     sort(v.begin(), v.end(), compare); 
     int c=0, max=0; 
     vector <pair<int, bool> >::iterator it = v.begin(); 
     while(it != v.end()) 
     { 
      if((*it).second) 
       c++; 
      else 
       c--; 
      if(max < c) 
       max = c; 
      it++; 
     } 
     cout<<max<<endl; 
     v.clear(); 
    } 
    return 0; 
} 
+0

О, хорошо! Ограничение Ya для начала и конца не определено должным образом. Спасибо! – winter