A.Guess the Maximum(枚举)
题意:
爱丽丝和鲍勃想出了一个相当奇怪的游戏。他们有一个整数数组a1,a2,…,ana_1,a_2,\ldots,a_na1,a2,…,an。爱丽丝选择了某个整数kkk并告诉了鲍勃,然后就发生了下面的事情:
- 鲍勃选择两个整数iii和jjj(1≤i<j≤n1\le i\lt j\le n1≤i<j≤n),然后找出整数ai,ai+1,…,aja_i,a_{i+1},\ldots,a_jai,ai+1,…,aj中的最大值;
- 如果得到的最大值严格大于kkk,则爱丽丝获胜,否则鲍勃获胜。
请帮助爱丽丝找出保证她获胜的kkk的最大值。
分析:
为了最大值尽可能小,爱丽丝会选择所有区间最大值的最小值−1-1−1,那么选择的连续子串越短越优。注意到区间长度越大,这个区间的最大值是随着它不减的,所以如果鲍勃要让爱丽丝选的最小的话,区间长度一定是222。
枚举所有长度为222的连续子串,求出它们最大值的最小值,然后减去111输出即可。
代码:
#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
const int N = 1e6 + 10;
LL n, a[N];
void solve() {
LL ans = 1e9;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
if (i > 1)
ans = min(ans, max(a[i], a[i - 1]));
}
cout << ans - 1 << endl;
}
int main() {
int t;
cin >> t;
while (t--)
solve();
return 0;
}
B.XOR Sequences(数学)
题意:
给你两个不同的非负整数xxx和yyy。考虑两个无穷序列a1,a2,a3,…a_1,a_2,a_3,\ldotsa1,a2,a3,…和b1,b2,b3,…b_1,b_2,b_3,\ldotsb1,b2,b3,…,其中
- an=n⊕xa_n=n\oplus xan=n⊕x
- bn=n⊕yb_n=n\oplus ybn=n⊕y
x⊕yx\oplus yx⊕y表示整数xxx和yyy的按位异或运算。
例如,有了x=6x=6x=6之后,序列aaa的前888个元素将如下所示:[7,4,5,2,3,0,1,14,…][7,4,5,2,3,0,1,14,\ldots][7,4,5,2,3,0,1,14,…]。请注意,元素的索引以111开始。
你的任务是找出序列aaa和bbb的最长公共子段†^\dagger†的长度。换句话说,求某个i,j≥1i,j\ge 1i,j≥1的最大整数mmm,使得ai=bj,ai+1=bj+1,…,ai+m−1=bj+m−1a_i=b_j,a_{i+1}=b_{j+1},\ldots,a_{i+m-1}=b_{j+m-1}ai=bj,ai+1=bj+1,…,ai+m−1=bj+m−1。
†^\dagger†序列ppp的一个子段是序列pl,pl+1,…,prp_l,p_{l+1},\ldots,p_rpl,pl+1,…,pr,其中1≤l≤r1\le l\le r1≤l≤
Codeforces Round 951 (Div. 2) A~E题解

最低0.47元/天 解锁文章
1088

被折叠的 条评论
为什么被折叠?



