think-cell Round 1

2024-02-21 15:20
文章标签 round cell think

本文主要是介绍think-cell Round 1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

think-cell Round 1

A. Maximise The Score

题意:给出2n个数,每次选两个取较小值加到分数里,分数最大为多少。

思路:排序,奇数位和。

AC code:

void solve() {cin >> n;int ans = 0;int a[N];for (int i = 0; i < 2*n; i ++) {cin >> a[i];}sort(a, a + 2 * n);for (int i = 0; i < 2 * n; i += 2) ans += a[i];cout << ans << endl;
}

B. Permutation Printing

题意:求长度为n的一个排列,该排列不存在两个不同的索引i,j使得pi平分pj,pi+1平分pj+1。

思路:奇偶交叉排列即可,注意n为偶数时先排偶数位,否则先排奇数位。

AC code:

void solve() {cin >> n;int t = 2;if (n % 2 == 0) {for (int i = 1; i <= n; i ++) {if (i % 2) a[t] = i, t += 2;}t = 1;for (int i = n; i >= 1; i --) {if (i % 2 == 0) {a[t] = i;t += 2;}}} else {t = 1;for (int i = 1; i <= n; i ++) {if (i % 2) a[t] = i, t += 2;}t = 2;for (int i = n; i >= 1; i --) {if (i % 2 == 0) {a[t] = i;t += 2;}}}for (int i = 1; i <= n; i ++) cout << a[i] << " ";cout << endl;
}

C. Lexicographically Largest

题意:给出长度为n的数组a,可以任意取出数组a中的元素,每次取出元素+当前下标存入一个栈中,然后比当前取出元素下标大的元素下标-1,注意堆栈是个排列,即堆栈中元素不能重复,求堆栈最大词典序。

思路:每次取出当前最大元素+下标即可,需要处理的是取到重复元素的处理,若取到重复元素,则所加下标递减1即可。这里可以用一个set来存已经入栈的元素,新元素+下标若重复,则在已经入栈的元素中选最小的-1再压入即可。选已经压入的元素中最小的元素-1可以最大化最终字典序,且不会在栈中重复。

AC code:

void solve() {priority_queue<int> q;cin >> n;for (int i = 1; i <= n; i ++) {int x; cin >> x;q.push(x + i);}set<int> s;while (!q.empty()) {auto t = q.top();q.pop();if (s.find(t) != s.end()) {t = *s.begin() - 1;}s.insert(t);cout << t << " ";}cout << endl;
}

D. Sum over all Substrings

题意:有点抽象,尽量理解。

首先是题目中的长度相同的字符串p和q的good,即对与p中的每一个字符pi,在q中都会存在一个子串符合pi模式;

然后是XX模式,即一个字符在一个子串中出现的次数为众数,则称字符串q为pi模式;

那么对于二进制字符串p,题目需要我们创造1最少的符合条件的good串q,每一子串都要符合good条件;

要最小化q中1的数量,最佳情况可以看出,当p中出现1是,q中每三个字符至少存在一个1,则可以符合当前子串good条件。

思路:

  • 对于D1,可以直接暴力,即当字符串p出现字符1时,那么q当前位标记为1,包括该字符以及之后两位的三位字符均可以通过当前一位1来保证子串good。
  • 对于D2,可以用dp来计算当前后缀连续子串的答案,由D1可知,影响1的数量的为每三位出现字符1的情况:
    • 当前位为0时,dp[i] = dp[i + 1];
    • 当前位为1时,dp[i] = dp[i + 3] + (n - i + 1);

AC code :

  • D1
void solve() {cin >> n;int ans = 0;string s; cin >> s;for (int i = 0; i < n; i ++) {string now = "";for (int j = i; j < n; j ++) {now += s[j];int pos = 0;while (pos < now.size()) {if (now[pos] == '1') {ans ++;pos += 2;}pos ++;}}}cout << ans << endl;
}
  • D2
void solve() {cin >> n;string s; cin >> s;s = " " + s;vector<int> dp(n + 10, 0);int ans = 0;for (int i = n; i >= 1; i --) {if (s[i] == '0') {dp[i] = dp[i + 1];} else {if (i + 3 > n) dp[i] = n - i + 1;else dp[i] = n - i + 1 + dp[i + 3]; }ans += dp[i];}cout << ans << endl;
}

这篇关于think-cell Round 1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/732231

相关文章

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

Codeforces Round #261 (Div. 2)小记

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。 #define X first#define Y secondvector<pair<int , int> > a ;int can(pair<int , int> c){return -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000 ;}int m

Codeforces Beta Round #47 C凸包 (最终写法)

题意慢慢看。 typedef long long LL ;int cmp(double x){if(fabs(x) < 1e-8) return 0 ;return x > 0 ? 1 : -1 ;}struct point{double x , y ;point(){}point(double _x , double _y):x(_x) , y(_y){}point op

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

cell phone teardown 手机拆卸

tweezer 镊子 screwdriver 螺丝刀 opening tool 开口工具 repair 修理 battery 电池 rear panel 后盖 front and rear cameras 前后摄像头 volume button board 音量键线路板 headphone jack 耳机孔 a cracked screen 破裂屏 otherwise non-functiona

Codeforces Round 971 (Div. 4) (A~G1)

A、B题太简单,不做解释 C 对于 x y 两个方向,每一个方向至少需要 x / k 向上取整的步数,取最大值。 由于 x 方向先移动,假如 x 方向需要的步数多于 y 方向的步数,那么最后 y 方向的那一步就不需要了,答案减 1 代码 #include <iostream>#include <algorithm>#include <vector>#include <string>

MemSQL Start[c]UP 2.0 - Round 1A(构造)

题目链接:http://codeforces.com/problemset/problem/452/A 解题思路: 打个表暴力查找匹配。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include <cstdio>#include <strin

Codeforces Round #281 (Div. 2)A(构造+暴力模拟)

题目链接:http://codeforces.com/problemset/problem/493/A 解题思路: 暴力的判断,分三种情况去判断即可。注意如果之前已经被罚下场后,那么在后面的罚下情况不应该算在输出结果内。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <co

Codeforces Round #182 (Div. 2)A(水题)

题目链接:http://codeforces.com/contest/302/problem/A 解题思路: 只要通过重新排列使区间内和为0即是1,否则是0. 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include <cstdio>#inc

Codeforces Round #233 (Div. 2)A(构造)

题目链接:http://codeforces.com/contest/399/problem/A 解题思路: 构造出来即可,考虑p-k和p+k两个边界分别于1和n作比较,对左右符号特殊处理。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include