1044. Shopping in Mars

来源:互联网 发布:参合陂之战 知乎 编辑:程序博客网 时间:2024/05/12 21:21
#include <stdio.h>#include <stdlib.h>#define INFINITY 100000int 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;}

0 0