Codeforces Round #735 (Div. 2) (A-D)
Posted TURNINING
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #735 (Div. 2) (A-D)相关的知识,希望对你有一定的参考价值。
A . 思路:对于一个很大的数,区间越大最小的数是越小的,他们的乘积也就越小,所以枚举相邻两个数就行了。
#include<bits/stdc++.h>
using namespace std;
#define lsn (u << 1)
#define rsn (u << 1 | 1)
#define mid (l + r >> 1)
typedef long long ll;
typedef unsigned long long ull;
typedef pair<double, double> P;
const int MAXN = 1e5 + 10;
const int MAX_LEN = 1e5 + 10;
const int MAX_LOG_V = 22;
const ll INF = 1e17;
const int inf = 0x3f3f3f3f;
const int mod = 19650827;
const double eps = 1e-7;
const ull B = 100000007;
int n;
ll a[MAXN];
void solve() {
scanf("%d", &n);
ll ans = 0;
for(int i = 1; i <= n; i++) {
scanf("%lld", &a[i]);
}
for(int i = 1; i < n; i++) {
ans = max(min(a[i],a[i+1])*max(a[i],a[i+1]), ans);
}
printf("%lld\\n", ans);
}
int main() {
//ios::sync_with_stdio(false);
int t = 1; scanf("%d", &t);
while(t--) {
solve();
}
}
B: 思路:枚举后100个就行了。。。。
#include<bits/stdc++.h>
using namespace std;
#define lsn (u << 1)
#define rsn (u << 1 | 1)
#define mid (l + r >> 1)
typedef long long ll;
typedef unsigned long long ull;
typedef pair<double, double> P;
const int MAXN = 1e5 + 10;
const int MAX_LEN = 1e5 + 10;
const int MAX_LOG_V = 22;
const ll INF = 1e17;
const int inf = 0x3f3f3f3f;
const int mod = 19650827;
const double eps = 1e-7;
const ull B = 100000007;
int n, k;
int a[MAXN];
void solve() {
scanf("%d %d", &n, &k);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
ll ans = -1e17;
for(int i = max(1, n-1000); i <= n; i++) {
for(int j = i+1; j <= n; j++) {
ans = max(ans, (ll)i*j-(ll)k*(a[i]|a[j]));
}
}
printf("%lld\\n", ans);
}
int main() {
//ios::sync_with_stdio(false);
int t = 1; scanf("%d", &t);
while(t--) {
solve();
}
return 0;
}
C 思路:观察发现 n > m n > m n>m时 0 取不到,直接输出0。当 n < = m n <= m n<=m时 令 n ⨁ x = y n \\bigoplus x = y n⨁x=y,根据题目要求,我们要找到一个y使 x > m x > m x>m且 y 最小。 n ⨁ y > m n \\bigoplus y > m n⨁y>m , y ⨁ \\bigoplus ⨁ n >= m + 1,怎么找最小的y呢,我们知道在二进制位中一个 2 i > ∑ j = 0 i − 1 2 j 2^i > \\sum_{j=0}^{i-1} 2^j 2i>∑j=0i−12j, 故只有当二进制位上n为0,m为1时我们才让y取1。
#include<bits/stdc++.h>
using namespace std;
#define lsn (u << 1)
#define rsn (u << 1 | 1)
#define mid (l + r >> 1)
typedef long long ll;
typedef unsigned long long ull;
typedef pair<double, double> P;
const int MAXN = 1e5 + 10;
const int MAX_LEN = 1e5 + 10;
const int MAX_LOG_V = 22;
const ll INF = 1e17;
const int inf = 0x3f3f3f3f;
const int mod = 19650827;
const double eps = 1e-7;
const ull B = 100000007;
int n, m;
void solve() {
scanf("%d %d", &n, &m);
if(n > m) {puts("0"); return ;}
m++;
int res = 0;
for(int i = 30; i >= 0; i--) {
if(!(n >> i & 1) && (m >> i & 1)) res |= (1 << i);
else if((n >> i & 1) && !(m >> i & 1)) break;
}
printf("%d\\n", res);
}
int main() {
//ios::sync_with_stdio(false);
int t = 1; scanf("%d", &t);
while(t--) {
solve();
}
return 0;
}
D 思路:研究一下样例发现,一连串含相同字符的字符串 ( 如 a a a a a ) (如aaaaa) (如aaaaa)当再往后添加一个相同字符时,添加后相同长度的子串的个数为添加前的+1,一奇一偶相加肯定为奇数。特判一下n为1的情况
#include<bits/stdc++.h>
using namespace std;
#define lsn (u << 1)
#define rsn (u << 1 | 1)
#define mid (l + r >> 1)
typedef long long ll;
typedef unsigned long long ull;
typedef pair<double, double> P;
const int MAXN = 1e5 + 10;
const int MAX_LEN = 1e5 + 10;
const int MAX_LOG_V = 22;
const ll INF = 1e17;
const int inf = 0x3f3f3f3f;
const int mod = 19650827;
const double eps = 1e-7;
const ull B = 100000007;
int n;
void solve() {
scanf("%d", &n);
if(n == 1) {puts("a"); return ;}
if(n % 2 == 0) {
int t = n / 2;
for(int i = 1; i < t; i++) printf("a");
printf("b");
for(int i = 1; i <= t; i++) printf("a");
}
else {
int t = n / 2;
for(int i = 1; i < t; i++) printf("a");
printf("bc");
for(int i = 1; i <= t; i++) printf("a");
}
puts("");
}
int main() {
//ios::sync_with_stdio(false);
int t = 1; scanf("%d", &t);
while(t--) {
solve();
}
return 0;
}
以上是关于Codeforces Round #735 (Div. 2) (A-D)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #735 (Div. 2)-C. Mikasa-题解
Codeforces Round #735 (Div. 2)-B. Cobb-题解
Codeforces Round #735 (Div. 2)-A. Cherry-题解
Codeforces Round #735 (Div. 2)-C. Mikasa-题解