zoj1610-Count the Colors

先来看下有问题的代码,不知道为什么老是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;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值