您的位置:首页 > 运维架构

PAT 1044. Shopping in Mars (25)

2015-03-11 20:33 453 查看
#include <stdio.h>
#include <vector>
using namespace std;
#define MAX 100008
struct Range{
int i;
int j;
Range(int ii,int jj):i(ii),j(jj){};
};
int n,m;
int arr[MAX];//arr[i]存放1-i的部分和,下标1开始有效
vector<Range> vec;
int main(){
freopen("/Users/pantingting/Documents/code/data/input", "r", stdin);
scanf("%d%d",&n,&m);
arr[0]=0;
for (int i=1; i<=n; i++) {
int temp;
scanf("%d",&temp);
arr[i]=arr[i-1]+temp;
}
int i=0,j=1,min=123123123;
while (j<=n&&i<=j) {
int sum=arr[j]-arr[i];
if (sum>=m) {
Range newR(i+1,j);
if (sum<min) {
min=sum;
vec.clear();
vec.push_back(newR);
}
else if (sum==min) {
vec.push_back(newR);
}
i++;//sum>=m的时候,这时候如果i不向后移动的话,j向后移动只会使得结果更大
}else{//sum<m
j++;
}
}
for (int i=0; i<vec.size(); i++) {
printf("%d-%d\n",vec[i].i,vec[i].j);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: