比赛链接: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)的更多相关文章

  1. Codeforces Round #666 (Div. 2) Power Sequence、Multiples of Length 思维

    题目链接:Power Sequence 题意: 给你n个数vi,你可以对这个序列进行两种操作 1.可以改变其中任意个vi的位置,无成本 2.可以对vi进行加1或减1,每次操作成本为1 如果操作之后的v ...

  2. Codeforces Round #666 (Div. 2) C. Multiples of Length (构造,贪心)

    题意:有一个长度为\(n\)的序列,可以操作\(3\)次,每次选取一段区间,然后区间的元素加减区间长度的倍数,\(3\)次操作后使得序列所有元素为\(0\),问具体操作情况. 题解:假如我们能选择一整 ...

  3. Codeforces Round #666 (Div. 2) B. Power Sequence (枚举)

    题意:有一个长度为\(n\)的序列,你每次可以对序列重新排序,然后花费\(1\)使某个元素加减\(1\),多次操作后使得新序列满足\(a_{i}=c^i\),\(c\)是某个正整数,求最小花费. 题解 ...

  4. Codeforces Round #666 (Div. 2) C. Multiples of Length (贪心)

    题意:给你一个由\(0,1,?\)组成的字符串,你可以将\(?\)任意改成\(0\)或\(1\),问你操作后能否使得该字符串的任意长度为\(k\)的区间中的\(0\)和$1的个数相等. 题解:我们首先 ...

  5. Codeforces Round #532 (Div. 2) 题解

    Codeforces Round #532 (Div. 2) 题目总链接:https://codeforces.com/contest/1100 A. Roman and Browser 题意: 给出 ...

  6. 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 ...

  7. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  8. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  9. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

随机推荐

  1. CopyOnWriteArrayList设计思路与源码分析

    CopyOnWriteArrayList实现了List接口,RandomAccess,Cloneable,Serializable接口. CopyOnWriteArrayList特性 1.线程安全,在 ...

  2. 转载 - Ubuntu源改国内源 与 批量更改ubuntu机器apt源

    change_apt_source.sh # !/bin/bash # 备份原来的源文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak # 获取 ...

  3. python学习笔记 | selenium各浏览器驱动下载地址

    Chrome http://chromedriver.storage.googleapis.com/index.html 不同的Chrome的版本对应的chromedriver.exe 版本也不一样, ...

  4. Spring Boot超详细用户管理项目(零)——开发前准备

    开始前的软件准备:(编写中:未完成) 使用软件介绍: Java版本:Java SE 11(LTS) 开发工具:IDEA(2020.3版本) Linux系统: 数据库: Java 版本:Java SE ...

  5. H5手机网页元素识别

  6. 简要MR与Spark在Shuffle区别

    一.区别 ①本质上相同,都是把Map端数据分类处理后交由Reduce的过程. ②数据流有所区别,MR按map, spill, merge, shuffle, sort, r educe等各阶段逐一实现 ...

  7. Java设计模式精讲之UML急速入门

    简单记录 - 慕课网 - Java设计模式精讲 Debug方式+内存分析 文章目录 第2章 UML急速入门 2-1.UML简单入门 UML定义 UML特点 UML 2.2分类 UML类图 理解泛化.实 ...

  8. C语言补码(C语言学习笔记)

    记录 在学习C语言数据范围时了解到了补码的概念,记录一下什么是补码,补码怎么运算的 运算 原文链接:https://www.cnblogs.com/lsgsanxiao/p/5113305.html ...

  9. Centos 7 关机和重启 命令

    1,关机命令 1 shutdown -h now/0 2 halt 3 init 0 4 poweroff 5 举例: 6 shutdown -h 3 ------3分钟后关机(可用shutdown ...

  10. 解决Python内CvCapture视频文件格式不支持问题

    解决Python内CvCapture视频文件格式不支持问题 在读取视频文件调用默认的摄像头cv.VideoCapture(0)会出现下面的视频格式问题 CvCapture_MSMF::initStre ...