Codeforces Round #666 (Div. 2)
比赛链接:https://codeforces.com/contest/1397
A. Juggling Letters
题意
给出 $n$ 个字符串,可在字符串间任意移动字母,问最终能否使这 $n$ 个字符串相同。
题解
如果可以,因为 $n$ 个字符串相同,所以每个字母的数量一定是 $n$ 的倍数。
代码
#include <bits/stdc++.h>
using namespace std; void solve() {
int n;
cin >> n;
vector<int> cnt(26);
for (int i = 0; i < n; i++) {
string s;
cin >> s;
for (char c : s) ++cnt[c - 'a'];
}
bool ok = all_of(cnt.begin(), cnt.end(), [&](int x) {
return x % n == 0;
});
cout << (ok ? "YES" : "NO") << "\n";
} int main() {
int t;
cin >> t;
while (t--) solve();
}
B. Power Sequence
题意
给出一个大小为 $n$ 的数组 $a$,允许操作如下:
- 重排数组,无花费
- 将一个数 $+1$ 或 $-1$,花费为 $1$
找出使得数组 $a$ 满足 $a_i = c^i$ 的最小花费。
题解
指数增长,枚举 $c$ 即可。
因为 $3 \le n \le 10^5, 1 \le a_i \le 10^9$,所以可以将上限设为 $10^{14}$,一旦有 $c^i$ 大于这个上限就停止枚举。
代码
#include <bits/stdc++.h>
using ll = long long;
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a.begin(), a.end());
ll ans = LLONG_MAX;
for (int c = 1; true; c++) {
bool too_big = false;
ll change = 0;
ll cur = 1;
for (int i = 0; i < n; i++) {
change += abs(a[i] - cur);
cur *= c;
if (cur > 1e14) {
too_big = true;
break;
}
}
if (too_big) break;
ans = min(ans, change);
}
cout << ans << "\n";
}
C. Multiples of Length
题意
给出一个大小为 $n$ 的数组 $a$,操作如下:
- 选择一个区间,给其中的每个数加上区间长度的一个倍数
共要进行 $3$ 次操作,找出使得数组 $a$ 满足 $a_i = 0$ 的一种方案。
题解
$gcd(n,n-1)=1$,所以选择一次长为 $n$ 的区间,两次长为 $n - 1$ 的区间。
代码
#include <bits/stdc++.h>
using ll = long long;
using namespace std;
int main() {
int n;
cin >> n;
vector<ll> a(n);
for (int i = 0; i < n; i++)
cin >> a[i];
if (n == 1) {
cout << 1 << ' ' << 1 << "\n" << -a[0] << "\n"
<< 1 << ' ' << 1 << "\n" << 0 << "\n"
<< 1 << ' ' << 1 << "\n" << 0 << "\n";
return 0;
}
cout << 1 << ' ' << n << "\n";
for (int i = 0; i < n; i++) {
cout << -a[i] * n << " \n"[i == n - 1];
}
cout << 1 << ' ' << n - 1 << "\n";
for (int i = 0; i < n - 1; i++) {
cout << a[i] * (n - 1) << " \n"[i == n - 2];
}
cout << 2 << ' ' << n << "\n";
for (int i = 1; i < n; i++) {
cout << a[i] * (i == n - 1 ? n - 1 : 0) << " \n"[i == n - 1];
}
}
D. Stoned Game
题意
有 $n$ 堆石子,两个人每次从另一个人没取过的石子堆中拿走一颗石子,无法再取者败,判断最终胜者。
代码
#include <bits/stdc++.h>
using namespace std; void solve() {
int n;
cin >> n;
vector<int> a(n);
int sum = 0;
for (int i = 0; i < n; i++) {
cin >> a[i];
sum += a[i];
}
sort(a.begin(), a.end());
if (a.back() > sum - a.back())
cout << "T" << "\n";
else
cout << (sum & 1 ? "T" : "HL") << "\n";
} int main() {
int t;
cin >> t;
while (t--) solve();
}
Codeforces Round #666 (Div. 2)的更多相关文章
- Codeforces Round #666 (Div. 2) Power Sequence、Multiples of Length 思维
题目链接:Power Sequence 题意: 给你n个数vi,你可以对这个序列进行两种操作 1.可以改变其中任意个vi的位置,无成本 2.可以对vi进行加1或减1,每次操作成本为1 如果操作之后的v ...
- Codeforces Round #666 (Div. 2) C. Multiples of Length (构造,贪心)
题意:有一个长度为\(n\)的序列,可以操作\(3\)次,每次选取一段区间,然后区间的元素加减区间长度的倍数,\(3\)次操作后使得序列所有元素为\(0\),问具体操作情况. 题解:假如我们能选择一整 ...
- Codeforces Round #666 (Div. 2) B. Power Sequence (枚举)
题意:有一个长度为\(n\)的序列,你每次可以对序列重新排序,然后花费\(1\)使某个元素加减\(1\),多次操作后使得新序列满足\(a_{i}=c^i\),\(c\)是某个正整数,求最小花费. 题解 ...
- Codeforces Round #666 (Div. 2) C. Multiples of Length (贪心)
题意:给你一个由\(0,1,?\)组成的字符串,你可以将\(?\)任意改成\(0\)或\(1\),问你操作后能否使得该字符串的任意长度为\(k\)的区间中的\(0\)和$1的个数相等. 题解:我们首先 ...
- Codeforces Round #532 (Div. 2) 题解
Codeforces Round #532 (Div. 2) 题目总链接:https://codeforces.com/contest/1100 A. Roman and Browser 题意: 给出 ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
随机推荐
- CopyOnWriteArrayList设计思路与源码分析
CopyOnWriteArrayList实现了List接口,RandomAccess,Cloneable,Serializable接口. CopyOnWriteArrayList特性 1.线程安全,在 ...
- 转载 - Ubuntu源改国内源 与 批量更改ubuntu机器apt源
change_apt_source.sh # !/bin/bash # 备份原来的源文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak # 获取 ...
- python学习笔记 | selenium各浏览器驱动下载地址
Chrome http://chromedriver.storage.googleapis.com/index.html 不同的Chrome的版本对应的chromedriver.exe 版本也不一样, ...
- Spring Boot超详细用户管理项目(零)——开发前准备
开始前的软件准备:(编写中:未完成) 使用软件介绍: Java版本:Java SE 11(LTS) 开发工具:IDEA(2020.3版本) Linux系统: 数据库: Java 版本:Java SE ...
- H5手机网页元素识别
- 简要MR与Spark在Shuffle区别
一.区别 ①本质上相同,都是把Map端数据分类处理后交由Reduce的过程. ②数据流有所区别,MR按map, spill, merge, shuffle, sort, r educe等各阶段逐一实现 ...
- Java设计模式精讲之UML急速入门
简单记录 - 慕课网 - Java设计模式精讲 Debug方式+内存分析 文章目录 第2章 UML急速入门 2-1.UML简单入门 UML定义 UML特点 UML 2.2分类 UML类图 理解泛化.实 ...
- C语言补码(C语言学习笔记)
记录 在学习C语言数据范围时了解到了补码的概念,记录一下什么是补码,补码怎么运算的 运算 原文链接:https://www.cnblogs.com/lsgsanxiao/p/5113305.html ...
- Centos 7 关机和重启 命令
1,关机命令 1 shutdown -h now/0 2 halt 3 init 0 4 poweroff 5 举例: 6 shutdown -h 3 ------3分钟后关机(可用shutdown ...
- 解决Python内CvCapture视频文件格式不支持问题
解决Python内CvCapture视频文件格式不支持问题 在读取视频文件调用默认的摄像头cv.VideoCapture(0)会出现下面的视频格式问题 CvCapture_MSMF::initStre ...