1044

第一次用尺取法,写的很杂乱。

#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;
}
发布了195 篇原创文章 · 获赞 9 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/zero_1778393206/article/details/87968163
今日推荐