Codeforces Round #627 (Div. 3)
C. Frog Jumps
题意: 给你一只青蛙,给定一个字符串s,一开始青蛙位于0位置,然后每次跳跃可以跳跃距离<=d,跳跃的方向由当前的字母决定。让你找到一个最小的d,使得青蛙能够到达n + 1位置。
题解: 思维。由于青蛙要到达n+1,因此必然要一直跳R(如果跳了L,那么向左,还会到达R),那么青蛙需要的最小的d,就是两个最远R之间的距离。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int const MAXN = 2e5 + 10;
int n, m, T;
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> T;
while(T--) {
string s;
cin >> s;
s = 'R' + s + 'R';
int res = 0;
for (int i = 0, cnt = 0; i < s.size(); ++i) {
if (s[i] == 'R') {
res = max(res, cnt);
cnt = 0;
}
else cnt++;
}
cout << res + 1 << endl;
}
return 0;
}
D. Pair of Topics
题意: 给定数字n,然后给定长度为n的数组a和数组b,要求计数 a i + a j > b i + b j a_i + a_j > b_i + b_j ai+aj>bi+bj的数目。
题解: 数学+思维。
看到这种式子,先考虑转换:原来的式子可以转化为: ( a i − b i ) + ( a j − b j ) > 0 (a_i - b_i) + (a_j - b_j) > 0 (ai−bi)+(aj−bj)>0,那么就可以转换为新的数组 c i = a i − b i c_i = a_i - b_i ci=ai−bi,则为 c i + c j > 0 c_i + c_j > 0