先来看下有问题的代码,不知道为什么老是wa,跟我下面重写ac的代码对比我实在找不出有什么不同.怎么也不会是因为map的问题.只有是输入数据问题,我也试了很多刁钻的数据,但是还是找不出哪里不同= =
#include<iostream>
#include<map>
using namespace std;
int arr[8001];
int main()
{
int num;
map<int,int> maps;
while(cin>>num)
{
maps.clear();
for(int i=0;i<8001;i++)
arr[i]=-1;
int l,r,col,maxr=0,minl=8002;
while(num--)
{
cin>>l>>r>>col;
if(l==r)
continue;
if(r>maxr)
maxr=r;
if(minl>l)
minl=l;
for(int i=l;i<r;i++)
arr[i]=col;
}
int temp=8002;
if(minl!=8002)
{
temp=arr[minl];
maps[temp]++;
}
for(int i=minl;i<maxr;i++)
{
if(arr[i]>=0)
if(arr[i]!=temp)
{
maps[arr[i]]++;
temp=arr[i];
}
}
map<int,int>::iterator it;
for(it=maps.begin();it!=maps.end();++it)
cout<<(*it).first<<' '<<(*it).second<<endl;
cout<<endl;
}
return 0;
}
再来重写ac的代码
#include<iostream>
#include<cstring>
using namespace std;
int arr[8001],cnum[8001];
int main()
{
int num;
while(cin>>num)
{
memset(arr,0,sizeof(arr));
memset(cnum,0,sizeof(cnum));
int l,r,col,maxr=0;
while(num--)
{
cin>>l>>r>>col;
if(l==r)
continue;
if(r>maxr)
maxr=r;
for(int i=l;i<r;i++)
arr[i]=col+1;
}
for(int i=0;i<maxr;i++)
{
while(i!=0&&arr[i]&&arr[i]==arr[i-1])
i++;
if(arr[i])
cnum[arr[i]-1]++;
}
for(int i=0;i<8001;i++)
if(cnum[i])
cout<<i<<' '<<cnum[i]<<endl;
cout<<endl;
}
return 0;
}