小欧想要构造一个合法的括号序列满足以下条件:
括号嵌套层数是指在一个字符串中,以左括号 “(” 和右括号 “)” 形成的括号对的最大嵌套深度。
一行两个整数 n , r ( 1 ≤ r ≤ n ≤ 1 0 5 ) n, r(1 ≤ r ≤ n ≤ 10^5) n,r(1≤r≤n≤105)。
一行一个字符串表示括号序列。若有多种构造方案,输出任意一个即可。
构造一种特殊的满足条件的括号序列即可。
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;
}
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)
小欧有一个长度为 n n n,首项为 a a a,公差为 d d d 的等差数列。现在,小欧把这 n n n 个数看作一个集合,每次操作可以从集合中任意选两个数 a i , a j a_i,a_j ai,aj,如果 a i + a j a_i+a_j ai+aj 是偶数,那么可以将 ( a i + a j ) / 2 (a_i+a_j)/2 (ai+aj)/2 加入到集合中。小欧想知道,经过若干次操作后,集合中最多能有多少个数。
一行三个整数 n , a , d n, a, d n,a,d,表示等差数列的长度,首项和公差。
输出一个整数,表示集合中最多能有多少个数。
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;
}
时间复杂度: O ( 1 ) O(1) O(1)。
空间复杂度: O ( 1 ) O(1) O(1)。
小欧拿了 n n n 个杯子排成了一排,其中有 k k k 个杯子装满了水,剩余的 n − k n-k n−k 个杯子为空的。小欧每回合的操作如下:
小欧想知道,她喝完所有水的回合数期望是多少?
两个正整数 n , k n,k n,k,用空格隔开。
一个浮点数,代表期望的回合数。如果你的答案和正确答案的误差不超过 1 0 − 6 10^{-6} 10−6,则认为答案正确。
本题留给读者小试牛刀。
题目来源:OPPO 2024届校招正式批笔试题-后端(C卷)
文章声明:题目来源 牛客 平台,如有侵权,请联系删除!