#include <stdio.h>
#include <stdlib.h>
#define INFINITY 100000
int FindClosest(int a[],int m,int n,int e);/*e表示误差哈哈哈哈哈*/
/*i表示数列的的始端,若和大于给定值,,应放弃i开头的数列,始端向后移,否则尾端向后移*/
int main()
{
int n,m, i, e;
scanf("%d %d", &n, &m);
int *diamond = (int *)malloc(sizeof(int)*n);
for (i = 0; i < n; i++)
scanf("%d", &diamond[i]);
e = FindClosest(diamond, m,n,0);
if(e!=0)
FindClosest(diamond,m,n,e);
return 0;
}
int FindClosest(int a[], int m,int n,int e)
{
int i, j,sum=a[0],Finde=INFINITY;
for (i = 0, j = 0; j < n;) {
if (sum>=m&&(sum - m < Finde))/*寻找能找到的最小误差*/
Finde = sum-m;
if (sum-m==e)/*在给定的误差范围内*/
printf("%d-%d\n", i + 1, j + 1);
if (sum >= m){
sum -= a[i];
i++;
if (j > i) {
sum -= a[j];
j--;
}
}
else {
j++;
sum += a[j];
}
}
return Finde;
}
1044. Shopping in Mars
最新推荐文章于 2022-05-27 21:40:48 发布