G--我要去内蒙古大草原

G--我要去内蒙古大草原

时间: 1ms        内存:128M

描述:

春天到了,小明想要从烟台开车去内蒙古大草原放松一下,这两地的距离是1422公里。小明的座驾每跑200公里必须加油。在烟台有加油站可以加满油,路上也有一些加油站。请你帮忙计算一下,小明能不能把车开到内蒙古再开回来。

输入:

多组测试数据。
每组测试数据第一行为n,表示加油站的个数;接着是n行整数,表示加油站到烟台的距离,取值范围是0到1422,没有两个加油站在同一位置。
最后一组测试数据后以0结束。

输出:

如果小明能完成这次旅行,输出POSSIBLE,不能完成输出IMPOSSIBLE 。

示例输入:

2
0
900
8
1400
1200
1000
800
600
400
200
0
0

示例输出:

IMPOSSIBLE
POSSIBLE

提示:

参考答案(内存最优[1092]):

#include<stdio.h>
int main(){
	int i,j,a[1422];
	int n;
	while(~scanf("%d",&n))
	{
		if(!n)break;
		for(i=0;i<n;i++)
			scanf("%d",&a[i]);
		for(i=0;i<n-1;i++)
			for(j=i+1;j<n;j++)
				if(a[i]>a[j])
				{
					int t=a[i];
					a[i]=a[j];
					a[j]=t;
				}
		a[n]=(1422-a[n-1])*2;
		for(i=n-1;i;i--)
			a[i]=a[i]-a[i-1];
		a[0]+=200;
		for(i=0;i<=n;i++)
			if(a[i]>200)
				break;
			printf(i!=n+1?"IMPOSSIBLE\n":"POSSIBLE\n");
	}
return 0;}

参考答案(时间最优[0]):

#include <iostream>
using namespace std;
int main()
{
	int T,i,j,temp;
	int dis[1423];
	while((cin>>T)&&T!=0)
	{
		for(i=0;i<T;i++)
		{
			cin>>dis[i];
		}
		for(i=0;i<T;i++)
		{
			temp=i;
			for(j=i;j<T;j++)
			{
				if(dis[temp]>dis[j])
					temp=j;
			}
			j=dis[i];
			dis[i]=dis[temp];
			dis[temp]=j;
		}
		for(i=0;i<T-1;i++)
		{
			if(dis[0]!=0)
			{
				cout<<"IMPOSSIBLE"<<endl;
				break;
			}
			if((dis[i+1]-dis[i])>200)
			{
				cout<<"IMPOSSIBLE"<<endl;
				break;
			}
			if((dis[T-1]+200)<1422)
			{
				cout<<"IMPOSSIBLE"<<endl;
				break;
			}
			if(2*(1422-dis[T-1])>200)
			{
				cout<<"IMPOSSIBLE"<<endl;
				break;
			}
		}
		if(i==T-1)
			cout<<"POSSIBLE"<<endl;
	}
	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注