南邮 OJ 1919 我的故事

我的故事

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 42            测试通过 : 25 

比赛描述

2012就要到了,我打算去超市采购一批食物上船。超市里有一排连续的货架,每个货架上有价值为w的商品。我想只想把中间的某一段连续的货架上的东西都买走。我身上一共有Vmoney,要知道这些钱留下来一点用也没有,所以我想正好一次性用光,到底该可不可以做到呢?

输入

第一行为一个正整数T表示有T组数据

每组数据第一行为两个正整数n,表示有n个货架(0<n<10000) V表示一共有的money(0<V)

接下来的一行有n个整数[w1..wn]

输出

如果可以刚好花完这么多钱输出possible,否则输出impossible

样例输入

2
5 7
1 2 3 4 5
5 8
1 2 3 4 5

样例输出

possible
impossible

提示

 

题目来源

张飞





#include<iostream>
using namespace std;

#define MAX_N 10000
int a[MAX_N];

int main(){
	int T,n,v,i,j,sum;
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&n,&v);
		for(i=0; i<n; i++){
			scanf("%d",a+i);
		}
		i = j = 0;
		sum = a[0];
		while(1){
			if(sum>v){
				sum -= a[i];
				i++;
			}else if(sum<v){
				j++;
				if(j<n){
					sum += a[j];
				}else{
					break;
				}
			}else{
				break;
			}
		}
		if(sum==v){
			printf("possible\n");
		}else{
			printf("impossible\n");
		}
	}
}


你可能感兴趣的:(ACM,我的故事,南邮OJ)