C o d e f o r c e s R o u n d 946 ( D i v . 3 ) \Huge{Codeforces~Round~946~(Div.3)} Codeforces Round 946 (Div.3)
题目链接:Codeforces Round 946 (Div. 3)
文章目录
Problems A. Phone Desktop
题意
有无限个 3 × 5 3\times 5 3×5的二维方阵,然后给出x个 1 × 1 1 \times 1 1×1的方块和y个 2 × 2 2\times 2 2×2的方块,要求所有方块全部放在方阵里,求最少需要多少个方阵。
思路
每个方阵能放两个 2 × 2 2\times 2 2×2的方块,或者15个 1 × 1 1\times 1 1×1的方块,然后根据 2 × 2 2\times 2 2×2个数,求出至少需要多少个方阵,然后再根据 1 × 1 1\times 1 1×1方块个数判断需不需要加方阵。
标程
void Solved() {
int x, y; cin >> x >> y;
int sum1 = (y + 1) / 2;
int sum2 = sum1 * 7;
if(y & 1) sum2 += 4;
sum2 -= x;
if(sum2 < 0) {
sum2 *= -1;
sum1 += (sum2 + 14) / 15;
}
cout << sum1 << endl;
}
Problems B. Symmetric Encoding
题意
题目给出一个字符串 s s s,然后要求求解其加密前的字符串。
加密过程为:
- 先将 s s s去重排序得到 s 2 s2 s2。
- 然后对 s 2 s2 s2进行首尾映射:
- 最后根据映射改变 s s s。
思路
根据加密过程进行模拟。
字符串是否加密,其去重排序的结果是不变的,然后用 m a p map map记录字母映射,然后对加密字符串解密即可。
标程
void Solved() {
int n; cin >> n;
string s; cin >> s;
string ss = s, s1;
sort(ss.begin(), ss.end());
s1 = s1 + ss[0];
for(int i = 1; i < n; i ++ ) {
if(s1.back() != ss[i]) s1 = s1 + ss[i];
}
map<char, char> mp;
int len = s1.size();
for(int i = 0; i < len; i ++ ) {
mp[s1[i]] = s1[len - i - 1</