【2023.03.17】T2 题解

1.题意描述

给出一个整数N。对其执行以下操作K次。

如果N是200的倍数,则将其除以200。否则,将N视为字符串,并在其末尾附加200。例如,7将成为7200,1234将成为1234200。

输出最终得到的结果。


2.输入输出格式

输入:

输入2个数:N,K。

输出:

输出对应的结果。


3.样例

样例输入

2021  4

样例输出

50531

4.数据范围

对于100%的数据,1 ≤ N ≤ 10^5 , 1 ≤ K ≤ 20。

5.题外话

教练给的题解:

可以发现将一个数-x,比它大的数-x对最小值不会有任何影响,比它大的数+x反而对最大值影响更大,相反
将一个数+x,把比它小的数+x不会对最大值有任何影响,-x反而对最小值影响更大,所以我们一旦确定了一
个数的增减,比它大/小的数的增减也就确定了,所以肯定在排好序的序列上使得一个前缀+x,一个后缀-x,然后求最大值和最小值做差更新答案。

我:

这是给人(gou)看的???

同机房大佬:

A了……

6.思路

可以发现将一个数-x,比它大的数-x对最小值不会有任何影响,比它大的数+x反而对最大值影响更大,相反
将一个数+x,把比它小的数+x不会对最大值有任何影响,-x反而对最小值影响更大,所以我们一旦确定了一
个数的增减,比它大/小的数的增减也就确定了,所以肯定在排好序的序列上使得一个前缀+x,一个后缀-x,然后求最大值和最小值做差更新答案。

打住,这不刚才你没看懂的吗???

欧,再来:

可以发现将一个数-x,比它大的数-x对最小值不会有任何影响,比它大的数+x反而对最大值影响更大;

相反:
将一个数+x,把比它小的数+x不会对最大值有任何影响,-x反而对最小值影响更大。

所以我们一旦确定了一个数的增减,比它大/小的数的增减也就确定了!!!

所以我错了……

注意:

排序好的序列

7.提交记录

15 pts

代码:

#include <bits/stdc++.h>

using namespace std;

const long long N = 1e6 + 1;

int n , k , a[N] , ans;

inline int read()
{
	int s = 0 , w = 1;
	char ch = getchar();
	while(ch < '0' || ch > '9')
	{
		if(ch == '-')
		{
			w = -1;
		}
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9')
	{
		s = s * 10 + ch - '0';
		ch = getchar();
	}
	return s * w;
}

int main()
{
	n = read();
	for(int i = 1;i <= n;i++)
	{
		a[i] = read();
	}
	k = read();
	ans = a[n] - a[1];
	for(int i = 1;i <= n;i++)
	{
		ans = min(ans , max(a[n] - k , a[i] + k) - min(a[i + 1] - k , a[1] + k));
	}
	cout << ans;
	return 0;
}

100 pts

代码:

#include <bits/stdc++.h>

using namespace std;

const long long N = 1e6 + 1;

int n , k , a[N] , ans;

inline int read()
{
	int s = 0 , w = 1;
	char ch = getchar();
	while(ch < '0' || ch > '9')
	{
		if(ch == '-')
		{
			w = -1;
		}
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9')
	{
		s = s * 10 + ch - '0';
		ch = getchar();
	}
	return s * w;
}

int main()
{
	n = read();
	for(int i = 1;i <= n;i++)
	{
		a[i] = read();
	}
	k = read();
	sort(a + 1 , a + n + 1);
	ans = a[n] - a[1];
	for(int i = 1;i <= n;i++)
	{
		ans = min(ans , max(a[n] - k , a[i] + k) - min(a[i + 1] - k , a[1] + k));
	}
	cout << ans;
	return 0;
}

区别:

	sort(a + 1 , a + n + 1);

艹……

posted @ 2023-03-17 17:11  Hzzxx  阅读(101)  评论(0编辑  收藏  举报