请指出我可能做错了什么

BYTSE2 - spoj: Please suggest what i might be doing wrong?

本文关键字:错了 什么      更新时间:2023-10-16
//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<<"0n";
        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;
}

使用变量存储当前编号。大厅里跳舞的人。对于每个出口,我都要从变量中减去。我尝试了一些测试用例,它工作得很好。但在提交时,它说错误的答案!

我试了很多方法做这道题,但都是徒劳的!请建议我可能做错了什么!问题链接:http://www.spoj.com/problems/BYTESE2/

代码在我看来非常好。我也喜欢把开始时间设为正数,结束时间设为负数的方法,但似乎在给定的问题中,时间并不总是正数,也就是说,海格可能是从某个负数开始记录时间的,所以在这种情况下,开始时间和结束时间都可能是负数,用这种方法会得出错误的答案。因此,您将不得不使用一些额外的内存来存储它是开始时间还是结束时间。我把你的代码编辑如下,它被接受了。

#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;
}