PAT-1046 Shortest Distance (20)

这道题目开始时以每次查询都去遍历一遍,往两个方向搜索,会超时,即使减掉一些情况。

考虑过用二维数组发现10^5*10^5,编译会报数组太大的错误,这个比较奇怪,在全局变量不是都是在对上分配吗?按理来说可以无限大啊。待考察

// 1046.cpp : 定义控制台应用程序的入口点。
//
//用一维数组来记录二维数组的信息,sum[j]-sum[i]就是sum[i][j]信息
#include "stdafx.h"
#include<stdio.h>
#define MIN(a,b) a<b?a:b
int data[100010];
int sum[100010];
int total;

int main()
{
	int n;
	int count;
	freopen("1046.txt","r",stdin);
	while(scanf("%d",&n)!=EOF)
	{
		total=0;
		for(int i=0;i<n;i++)
		{
			scanf("%d",&data[i]);
			total+=data[i];
			sum[i]=total;//一维数组记录总和
		}
		scanf("%d",&count);
		int start,end;
		for(int j=0;j<count;j++)
		{
			scanf("%d%d",&start,&end);
			int min=start>end?end:start;
			int max=start<end?end:start;
			int tmp=sum[max-2]-sum[min-1]+data[min-1];
			tmp=tmp<0?0-tmp:tmp;
			printf("%d\n",MIN(total-tmp,tmp));
		}
	}
	return 0;
}

 

  

 

posted on 2014-11-15 17:10  Champion Lai  阅读(200)  评论(0编辑  收藏  举报

导航