他 钟神的模拟题

【问题描述】

一张长度为????的纸带,我们可以从左至右编号为0 − ????(纸带最左端 标号为0)。 现在有????次操作, 每次将纸带沿着某个位置进行折叠, 问所有操作之后纸带的长度是多少。

【输入格式】

第一行两个数字????, ????如题意所述。
接下来一行????个整数代表每次折叠的位置。

【输出格式】

一行一个整数代表答案。

【样例输入】

5 2
3 5

【样例输出】

2

【样例解释】

树上有只鸟。

【数据规模与约定】

对于60%的数据,????, ???? ≤ 3000。
对于100%的数据,???? ≤ 10^18, ???? ≤ 3000。

题解:

数据很水,我们模拟即可,我们模拟折点的变化,因为我们发现折的时候,非折点的点是对最终答案没有影响的,所以只需对折点进行更改即可。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll num[3333];
int main()
{
	freopen("he.in", "r", stdin);
	freopen("he.out", "w", stdout);
	ll n;
	int m;
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
		scanf("%lld", &num[i]);
	for (int i = 1; i < m; i++)
		for (int j = i + 1; j <= m; j++)
			if (num[i] > num[j])	num[j] = 2*num[i]-num[j];
	ll t = num[1];
	n = max(t, n-t);
	for (int i = 2; i <= m; i++)
	{
		t = num[i] - num[i-1];
		n = max(t, n-t);
	}
	cout << n;
	fclose(stdin);
	fclose(stdout);
	return 0;
}

 

上一篇
下一篇