`
人生难得糊涂
  • 浏览: 114164 次
社区版块
存档分类
最新评论

POJ1083,水题

 
阅读更多

这道题思路还是很简单的:因为要求至少要用多少时间,那么就要求出哪个子走廊要用到的次数最多,重叠次数最多的即所求答案,于是用一个计数器数组flag[]记录经过过房间的次数,最后flag中的最大值既结果。

但是需要注意的有两点,

1.如果开始的房间数是偶数,则要将区间起点-1,如果结束的房间号是奇数,则要将区间终点+1.

2.不一定是从小房间号搬到大房间号,也可能从大房间号搬到小房间号,所以在输入搬桌子的起点终点后,要把小的房间号存在扫描区间起点start中,把大的房间号存在end中。(因为没考虑到这点,贡献了一次wa,又因为交换函数写错地方了,要贡献了一次wa,伤心。。)

代码如下

#include "iostream"
using namespace std;
#define len 410
int main()
{
	int t;
	int n;
	int i;
	scanf("%d",&t);
	int flag[len];
	int ans;
	while (t--)
	{
		int start,end;
		scanf("%d",&n);
		memset(flag,0,sizeof(flag));
		ans=0;
		while(n--)
		{
			scanf("%d",&start);
			scanf("%d",&end);
			if (start>end)
			{
				int t;
				t=start;
				start=end;
				end=t;
			}
			if (start%2==0)
				i=start-1;
			else
				i=start;
			int iend;
			if (end%2==1)
				iend=end+1;
			else
				iend=end;
			for (;i<=iend;i++)
			{
				flag[i]++;
				if(flag[i]>ans)
					ans=flag[i];
			}
		}
		
		printf("%d\n",ans*10);
	}

	
	return 0;
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics