2024/6/28UPD CSDN又擅自给我改VIP文章:(
题面
题目大意
给定一个长度为 n n n 的数组 a a a,可以选定一个区间 [ l , r ] [l, \; r] [l,r] 进行恰好一次操作,求操作后最大的 a n − a 1 a_n - a_1 an−a1。
操作方法:选定区间 [ l , r ] [l, \; r] [l,r] 和旋转次数 k k k, 每次旋转为 a l = a l + 1 , a l + 1 = a l + 2 , … , a r − 1 = a r , a r = a l a_l = a_{l + 1}, \; a_{l + 1} = a_{l + 2}, \; \dots, \; a_{r - 1} = a_r, \; a_r = a_l al=al+1,al+1=al+2,…,ar−1=ar,ar=al
输入格式
第一行一个整数 T ( 1 ⩽ T ⩽ 50 ) T \; (1 \leqslant T \leqslant 50) T(1⩽T⩽50),表示测试样例组数。
对于每组测试样例,第一行为一个整数 n ( 1 ⩽ n ⩽ 2000 ) n \; (1 \leqslant n \leqslant 2000) n(1⩽n⩽2000) 表示数组长度。
接下来的一行含有 n n n 个整数 a i ( 1 ⩽ a i ⩽ 999 ) a_i \; (1 \leqslant a_i \leqslant 999) ai(1⩽ai⩽999),表示该数组。
数据保证 ∑ n ⩽ 2000 \sum n \leqslant 2000 ∑n⩽2000。
输出格式
对于每组测试样例包含一行一个整数,表示最大的 a n − a 1 a_n - a_1 an−a1。
T r a n s l a t e d b y Z i g h Translated \; by \; Zigh TranslatedbyZigh
分析
根据题面,我们不难发现有效的操作只有 3 3 3 种 [ 1 , n ] , [ 2 , n ] , [ 1 , n − 1 ] [1, \; n], [2, \; n], [1, \; n - 1] [1,n],[2,n],[1,n−1]。因为 l ⩾ 2 & & r ⩽ n − 1 l \geqslant 2 \; \&\& \; r \leqslant n - 1 l⩾2&&r⩽n−1 的操作一定是无效的,因为这样的操作显然不会影响答案。
对于 [ 2 , n ] [2, \; n] [2,n] 这样的操作不难发现答案是 max i = 2 n { a i } − a 1 \max_{i = 2}^{n} \{a_i\} -a_1 maxi=2n{ai}−a1, [ 1 , n − 1 ] [1, n - 1] [1,n−1] 的同理为 a n − min i = 1 n − 1 { a i } a_n - \min_{i = 1}^{n - 1} \{a_i\} an−mini=1n−1{ai}。
对于 [ 1 , n ] [1, \; n] [1,n] 的操作,我们可以发现当原序列中的 a i a_i ai 作为结尾时,作为开头的一定是在原序列中的 a i + 1 a_{i + 1} ai+1。特别的,当 i = n i = n i=n 时开头应为 a 1 a_1 a1。我们只需要取出最大的 a i − a i + 1 a_i - a_{i + 1} ai−ai+1 即可。( 千万不要以为只用找这里面的最大数及它对应的开头 和 里面的最小数及它对应的结尾就行了,别问我怎么知道的,问就是不知道)。
代码
//省略快读和头文件
int T;
int n;
int a[MAXN];
int main()
{
T = inpt();
while(T--) {
n = inpt();
for(int i = 1; i <= n; i++)
a[i] = inpt();
int max_suf = -1e5, min_pre = 1e5;
int tmp = -1e5;
for(int i = 1; i <= n; i++) {
if(i != 1) {
max_suf = max(max_suf, a[i]);
}
if(i != n) {
min_pre = min(min_pre, a[i]);
}
tmp = max(tmp, a[i] - a[i + 1 > n ? 1 : i + 1]);
}
int ans = max(a[n] - min_pre, max_suf - a[1]);
ans = max(ans, tmp);
printf("%d\n", ans);
}
return 0;
}
最后来猜猜题目翻译里的 Z i g h Zigh Zigh 是谁呢Qwq。