题意
n个整数 a[ 1 ] ~ a[ n ] 可以进行 m 次操作,每次操作 可以对 或是
求m次操作后最大值与最小值差的最大值可能是多少
思路
进行m次操作肯定是对同一个数操作m次,如果操作分散是不能让要求的差最大的
先找到原数组的最大值和最小值,让后对数组每一个数分别操作m次找最大值就好,直接遍历就行
注意特判 n == 1的情况
代码
#include<bits/stdc++.h> using namespace std; #pragma GCC optimize(2) #pragma GCC optimize(3) typedef long long ll; #define INF 0x3f3f3f3f const int mod = 1e9+7; const int maxn = 1e5+5; #define stop system("pause") inline ll read(){ ll s = 0, w = 1; char ch = getchar(); while (ch < 48 || ch > 57) { if (ch == '-') w = -1; ch = getchar(); } while (ch >= 48 && ch <= 57) s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar(); return s * w; } ll a[100005]; int main(){ ll n = read(), m = read(); ll mini = 1e18, maxi = -1e18; for (int i = 1; i <= n; ++i) { a[i] = read(); mini = min(mini, a[i]); maxi = max(maxi, a[i]); } if (n == 1){ cout<<0<<endl; return 0; } ll ans = 0; for (int i = 1; i <= n; ++i) { ans = max(ans, maxi - a[i] + m * i); ans = max(ans, a[i] + m * i - mini); } cout<<ans<<endl; return 0; }