第一次用尺取法,写的很杂乱。
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
#define INF 0xfffffff
int Solve(vector<int> A, int m,int n, queue<int> &B);
int main()
{
int n, m;
vector<int> A;
cin >> n >> m;
for (int i = 0; i < n; i++)
{
int a;
cin >> a;
A.push_back(a);
}
queue<int> B;
int ans=Solve(A, m, n, B);
if(ans!=m)
ans = Solve(A, ans, n, B);
while (!B.empty())
{
int a, b;
a = B.front(); B.pop();
b = B.front(); B.pop();
cout << a << '-' << b << endl;
}
system("pause");
return 0;
}
int Solve(vector<int> A, int m, int n, queue<int> &B)
{
int sum = 0;
int i, j;
i = j = 0;
sum = A[i];
int min = INF;
while (true)
{
if (sum == m)
{
B.push(i+1);
B.push(j+1);
j++;
if (j == n)
break;
sum += A[j];
}
else if (sum < m)
{
j++;
if (j == n)
break;
sum += A[j];
}
else if (sum > m)
{
if (sum < min)
min = sum;
i++;
if (i == n)
break;
sum -= A[i - 1];
if (j < i)
{
j++;
sum += A[j];
}
}
}
if (B.size() == 0)
return min;
else
return m;
}