# A

水题

c++
1
2
3
4
5
6
7
8
t = eval(input())

if t >= 38.0:
    print(1)
elif 37.5 <= t < 38:
    print(2)
else:
    print(3)

# B

# 题意

给你一个只有 ioi、o 组成的字符串,他们必须以 ioio 相邻的形式存在,你可以任意添加字符,问最少要添加多少个才能满足题意。

# 题解

“两个 “、” 两个 “遍历,如果当前是 ii,那么下一个一定要是 oo,如果不是 oo 如果就得加一个。如果当前是 oo 的话,则代表我们要加一个 ii

c++
1
2
3
4
5
6
7
8
9
10
11
12
void solve () {
cin >> s;

for (int i = 0; i < s.size(); i++) {
if (s[i] == 'i' && i + 1 < s.size() && s[i + 1] == 'o')
i++;
else
cnt++;
}

cout << cnt << endl;
}

# C

# 题意

给定一个序列,任意确定一半和另一半,求两半中,不同数字计数的和。

# 题解

用两个 mapmap 记录即可。

c++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int n, a[N];

map<int, int> l, r; // l r 分别记录左边、右边出现过什么数
int cntLeft = 0, cntRight = 0; // 记录左边、右边数的个数
int res = 0;

void solve () {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];

if (!r[a[i]])
cntRight++;
r[a[i]]++;
}

for (int i = 1; i < n; i++) {
if (l[a[i]] == 0)
cntLeft++;
l[a[i]]++, r[a[i]]--;
if (r[a[i]] == 0)
cntRight--;
res = max(cntLeft + cntRight, res);
}

cout << res << endl;
}

# D

# 题意

给定一个整数 n,(1n1018)n,(1 \le n \le 10^{18}),问,能不能找到一对正整数 (x,y)(x,y) 满足 x^3 - y^3 == n

# 题解

暴力?数学?不造啊,拼尽全力还是 WAWA 两个点

c++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void solve () {
cin >> n;
for (int a = 1; a * a * a <= n; a++) {
if (n % a == 0) {
int d = a * a - n / a;
int delta = 9 * a * a - 12 * d;
int t = sqrt(9 * a * a - 12 * d);

if (t * t == delta && t >= 0) {
int y1 = -3 * a + t;

if (y1 % 6 == 0 && y1 % 6 == 0) {
y1 /= 6;
if (y1 > 0 && y1 + a > 0) {
cout << y1 + a << " " << y1 << endl;
return;
}
}
}
}
}

cout << -1 << endl;
}

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

duoxichangan 微信支付

微信支付

duoxichangan 支付宝

支付宝