Codeforces Round #735 (Div. 2)
Codeforces Round #735 (Div. 2)
题目链接:Codeforces Round #735 (Div. 2
A. Cherry
题意:给定一个数组,求数组的任意一个一个区间使得其中最大值与最小值乘积最大
解题思路:经过简单的思考可以知道这个答案一定是相邻的,之后就可以轻松解决了
解题代码:
#include <iostream>
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define pii = pair<int,int>
using namespace std;
const int maxn = 3e5 + 10;
int a[maxn];
signed main(){
int t;
cin >> t;
while (t--){
int n;
cin >> n;
int ans = 0;
for(int i = 1;i<=n;i++)cin >> a[i];
for(int i = 2;i<=n;i++){
ans = max(ans,a[i] * a[i - 1]);
}
cout << ans <<endl;
}
//system("pause");
return 0;
}
B.Cobb
题意:给定数组,求一个\((i,j)\)使得\(i · j - k ·(a_i | a_j)\)最大
解题思路:与上一题差不多,最大答案一定会在附近105个值内产生,于是,我们每105个取试着取值即可
解题代码:
#include <iostream>
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define pii = pair<int,int>
using namespace std;
const int maxn = 3e5 + 10;
int a[maxn];
const int INF = 1e18;
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t;
cin >> t;
while (t--){
int n, k;
cin >> n >> k;
int ans = -INF;
for(int i = 1;i <= n;i++)cin >> a[i];
for (int i = max(1ll, n - 105); i <= n; i++) {
for (int j = i + 1; j <= n; j++) {
ans = max(ans, i * j - k * (a[i] | a[j]));
}
}
cout << ans << endl;
}
//system("pause");
return 0;
}
C.Mikasa
题意:给定n和m,求解MEX(\(n⊕0,n⊕1,…,n⊕m\))
解题思路: \(n⊕k = x\)则\(n ⊕ x = k\)于是问题反转了,变成找到一个最小的k,使得\(n ⊕ k ≥ m + 1\),从位运算的角度考虑,之后贪心构造即可
解题代码:
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
int t;
cin >> t;
while (t--) {
int n, m;
cin >> n >> m;
int ans = INT_MAX ^ n;
for (int i = 1 << 30; i; i >>= 1)
if (ans & i && (ans ^ i ^ n) > m)
ans ^= i;
cout << ans << '\n';
}
}
D.Diane
题意:用小写字母组成一个长度为n的字符串,使得字符串的所有相同子串个数为奇数
解题思路:奇+偶 = 奇,因此用x个a和1个b和x - 1个a凑长度为n的字符串,如果少一位则补c
解题代码:
#include <iostream>
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define pii = pair<int,int>
using namespace std;
const int maxn = 3e5 + 10;
int a[maxn];
const int INF = 1e18;
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t;
cin >> t;
while(t--){
int n, m;
cin >> n;
string ans = "";
if(n == 1){
putchar('s');
putchar('\n');
continue;
}else if(n % 2 == 0){
for(int i = 1;i <= n/2;i++) putchar('s');
putchar('t');
for(int i=1;i<n/2;i++)putchar('s');
putchar('\n');
}else{
n--;
for(int i=1;i<=n/2;i++)putchar('s');
putchar('t');
for(int i=1;i<n/2;i++)putchar('s');
putchar('l');
putchar('\n');
}
}
return 0;
}

浙公网安备 33010602011771号