A.
判断首位字符是否相等即可
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 7;
void solve() {
int n;
string s;
cin >> n >> s;
if(s[0] == s[n - 1]) cout << "No" << endl;
else cout << "Yes" << endl;
}
int main() {
int T;
cin >> T;
while(T --) solve();
}
B.
思维题,答案为从小到大排序后的中间的数。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 7;
int a[N];
bool cmp(int x, int y){ return x > y;}
void solve() {
int n;
cin >> n;
for(int i = 1; i <= n; i ++) {
cin >> a[i];
}
sort(a + 1, a + n + 1, cmp);
cout << a[(n + 1) / 2] << endl;
}
int main() {
int T;
cin >> T;
while(T --) solve();
}
D1.
设 \(k\) 为 \(\max(mex)\),若 \(k > m\),则答案为 \(k(m + 1)\)。对于 \([0, k - 1]\) 的部分,\(f(i) = k\),这部分的总答案为 \(k * k\)。对于 \([k, m]\),\(f(i) = i\),这部分的总答案为 \(\frac{(k + m)(k - m - 1)}{2}\),因此总答案为 \(k * k + \frac{(k + m)(k - m - 1)}{2}\)。