小欧的括号嵌套
题目描述
小欧想要构造一个合法的括号序列满足以下条件:
- 括号序列长度恰好为 。
- 括号序列的嵌套层数最大值为 。
括号嵌套层数是指在一个字符串中,以左括号 "(" 和右括号 ")" 形成的括号对的最大嵌套深度。
输入描述
一行两个整数 。
输出描述
一行一个字符串表示括号序列。若有多种构造方案,输出任意一个即可。
解题思路
构造一种特殊的满足条件的括号序列即可。
代码实现
int main() {
int n, r;
scanf("%d%d", &n, &r);
string s = string(r, '(') + string(r, ')');
for (int k = n / r; k-- > 0; cout << s);
cout << string(n % r, '(') + string(n % r, ')');
return 0;
}
时间复杂度:
空间复杂度:
小欧的等差数列
题目描述
小欧有一个长度为 ,首项为 ,公差为 的等差数列。现在,小欧把这 个数看作一个集合,每次操作可以从集合中任意选两个数 ,如果 是偶数,那么可以将 加入到集合中。小欧想知道,经过若干次操作后,集合中最多能有多少个数。
输入描述
一行三个整数 ,表示等差数列的长度,首项和公差。
输出描述
输出一个整数,表示集合中最多能有多少个数。
解题思路
- =
- 若 为偶数,则 为偶数,但 已存在于集合中。
- 若 为偶数,则 为偶数,此时 不一定在集合中。
- 若由集合衍生的数 在 之间,那么 必然可以由 衍生得到, 同理。
- 所以,仅需考虑由 可以衍生得到多少数即可。
- 若 的因数包含 ,那么,由 可以衍生得到 个数,由集合可衍生得到的数的个数为 。
代码实现
int main() {
long long n, a, d, k = 0;
cin >> n >> a >> d;
while (!(d & 1))k++, d >>= 1;
cout << n + ((1 << k) - 1) * (n - 1);
return 0;
}
时间复杂度:。
空间复杂度:。
小欧喝水
小欧拿了 个杯子排成了一排,其中有 个杯子装满了水,剩余的 个杯子为空的。小欧每回合的操作如下:
- 随机选择一个杯子。
- 杯子是空的。回合直接结束。
- 杯子是满的。如果小欧上一回合喝过了水,则回合结束;否则将喝完这杯水,回合结束。
小欧想知道,她喝完所有水的回合数期望是多少?
输入描述
两个正整数 ,用空格隔开。
输出描述
一个浮点数,代表期望的回合数。如果你的答案和正确答案的误差不超过 ,则认为答案正确。
解题思路
本题留给读者小试牛刀。
END
文章文档:公众号 字节幺零二四 回复关键字可获取本文文档。
题目来源:OPPO 2024届校招正式批笔试题-后端(C卷)
文章声明:题目来源 牛客 平台,如有侵权,请联系删除!