比赛链接:Here

1551A. Polycarp and Coins (签到)

题意:

我们有任意个面额为 \(1\) 和 \(2\) 的硬币去支付 \(n\) 元账单,

现在请问怎么去分配数额使得 \(c_1 +2 * c_2 = n\) 并且要最小化 \(|c_1-c_2|\)


贪心,

很容易想到最小化 \(|c_1 - c_2|\) 等于 \(0\) 或 \(1\)

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
int n;
cin >> n;
if (n % 3 == 0) cout << n / 3 << " " << n / 3 << "\n";
else if (n % 3 == 1) cout << n / 3 + 1 << " " << n / 3 << "\n";
else cout << n / 3 << " " << n / 3 + 1 << "\n";
}
}

1551B1. Wonderful Coloring - 1(easy)

题意:

给定长度为 \(n\) 的字符串和 \(k = 2\) 种颜色,

对于字符串每一个位置要么不涂颜色,要么每种颜色的字母都要不同并且最后 \(k\) 种颜色涂的个数相同

请输出每种颜色最后的个数


统计 26 个字母出现次数,然后出现超过 2 的+1,仅出现一次的个数 / 2即可(易证明)

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
string s;
cin >> s;
int a[30] = {0};
for (int i = 0; i < int(s.length()); ++i) {
a[s[i] - 'a']++;
}
int a2 = 0, a1 = 0;
for (int i = 0; i < 26; ++i) {
if (a[i] == 1)a1++;
if (a[i] > 1)a2++;
}
cout << a1 / 2 + a2 << "\n";
}
}

1551B2. Wonderful Coloring - 2 (hard版本)

题意基本同 B1 一致,

但需输出每个位置数字涂的颜色


写了两罚模拟 \(\mathcal{O}(n^2)\) 不出所料肯定 T了,

转换一下思路,首先和 B1 一样我们需要去统计每种数字的个数,但由于最后需要输出每个位置的颜色编号,所以还得存一下下标 (pos)

  • \(cnt[a[i]] \le k\) 的将下标存储
  • \(cnt[a[i]] > k\) 无需使用标 \(0\)

当然对于多余的元素,可以直接从删除

while (pos.size() % k != 0)pos.pop_back();

此时 pos 中所有元素均为有效下标,我们只要对应原数组标记颜色编号即可

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
int n, k;
cin >> n >> k;
vector<int>a(n), cnt(n);
vector<int>pos;
for (int i = 0; i < n; ++i) {
cin >> a[i], a[i] -= 1;
cnt[a[i]] += 1;
if (cnt[a[i]] <= k) pos.push_back(i);
}
while (pos.size() % k != 0)pos.pop_back();
sort(pos.begin(), pos.end(), [&](int i, int j) {return a[i] < a[j];});
vector<int>ans(n);
for (int i = 0; i < pos.size(); ++i)
ans[pos[i]] = i % k + 1;
for (int i = 0; i < n; ++i)
cout << ans[i] << " \n"[i == n - 1];
}
}

1551C. Interesting Story

题意:

一个作家有 \(n\) 个单词,每一个单词只会由 a,b,c,d,e 构成,他想用 \(m(0\le m\le n)\) 个单词写一个故事

一个故事是否有趣在于:

  • 故事中存在一个字母的个数比其他字母个数的总和还更多

    比如:bac,aaada,e 三个单词,a 出现的次数比其他 4 种单词出现次数都多

请输出在保证故事有趣的情况下用更多的单词写故事


这里建议直接看代码便于理解

【AC Code】代码参考于比赛 高Rank dalao

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
int n;
cin >> n;
vector<string>s(n);
for (int i = 0; i < n; ++i) cin >> s[i];
int ans = 0;
for (int c = 0; c < 5; ++c) {
vector<int>f(n);
for (int i = 0; i < n; ++i) {
for (auto x : s[i])
if (x == 'a' + c)f[i]++;
else f[i]--;
} sort(f.begin(), f.end(), greater<int>());
int sum = 0;
for (int i = 0; i < n; ++i) {
sum += f[i];
if (sum <= 0)break;
ans = max(ans, i + 1);
}
}
cout << ans << "\n";
}
}

很好奇自己是怎么读题读成使用连续的单词去写故事的啊?kola

1551D1. Domino (easy version)

题意:待补


多米诺骨牌的排放似乎在ABC的某一场也出现过

如果 \(n\) 为奇数

  • 最少要横放 \(m / 2\) 个,不然最少 \(0\) 个
  • 最多 \(n * m / 2 = (m \% 2 == 1 ?\ n / 2 : 0)\) 个

对于给出的 \(k\) 只要在 \([mn,mx]\) 就输出 YES

int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
int n, m, k;
cin >> n >> m >> k; int mn = (n % 2 == 1 ? m / 2 : 0);
int mx = n * m / 2 - (m % 2 == 1 ? n / 2 : 0);
if (mn <= k and k <= mx and (k - mn) % 2 == 0) cout << "YES\n";
else cout << "NO\n";
}
}

Codeforces Round #734 (Div. 3) A~D1 个人题解的更多相关文章

  1. 刷题记录:Codeforces Round #734 (Div. 3)

    Codeforces Round #734 (Div. 3) 20210920.网址:https://codeforces.com/contest/1551. 编程细节:下标定义不要一会[1,n]一会 ...

  2. Codeforces Round #609 (Div. 2)前五题题解

    Codeforces Round #609 (Div. 2)前五题题解 补题补题…… C题写挂了好几个次,最后一题看了好久题解才懂……我太迟钝了…… 然后因为longlong调了半个小时…… A.Eq ...

  3. Codeforces Round #741 (Div. 2), problem: (D1) Two Hundred Twenty One (easy version), 1700

    Problem - D1 - Codeforces 题意: 给n个符号(+或-), +代表+1, -代表-1, 求最少删去几个点, 使得     题解(仅此个人理解): 1. 这题打眼一看, 肯定和奇 ...

  4. Codeforces Round #556 (Div. 2) D. Three Religions 题解 动态规划

    题目链接:http://codeforces.com/contest/1150/problem/D 题目大意: 你有一个参考串 s 和三个装载字符串的容器 vec[0..2] ,然后还有 q 次操作, ...

  5. Codeforces Round #604 (Div. 2) E. Beautiful Mirrors 题解 组合数学

    题目链接:https://codeforces.com/contest/1265/problem/E 题目大意: 有 \(n\) 个步骤,第 \(i\) 个步骤成功的概率是 \(P_i\) ,每一步只 ...

  6. Codeforces Round #624 (Div. 3) F. Moving Points 题解

    第一次写博客 ,请多指教! 翻了翻前面的题解发现都是用树状数组来做,这里更新一个 线段树+离散化的做法: 其实这道题是没有必要用线段树的,树状数组就能够解决.但是个人感觉把线段树用熟了会比树状数组更有 ...

  7. Codeforces Round #677 (Div. 3) E、G题解

    E. Two Round Dances #圆排列 题目链接 题意 \(n\)(保证偶数)个人,要表演一个节目,这个节目包含两种圆形舞蹈,而每种圆形舞蹈恰好需要\(n/2\)个人,每个人只能跳一种圆形舞 ...

  8. Codeforces Round#402(Div.1)掉分记+题解

    哎,今天第一次打div1 感觉头脑很不清醒... 看到第一题就蒙了,想了好久,怎么乱dp,倒过来插之类的...突然发现不就是一道sb二分吗.....sb二分看了二十分钟........ 然后第二题看了 ...

  9. Codeforces Round #604 (Div. 2) 练习A,B题解

    A题 链接 思路分析: 因为只需要做到相邻的不相同,利用三个不同的字母是肯定可以实现的, 所以直接先将所有的问号进行替换,比如比前一个大1,如果与后面的冲突,则再加一 代码(写的很烂): #inclu ...

  10. Codeforces Round #599 (Div. 2)的简单题题解

    难题不会啊…… 我感觉写这个的原因就是因为……无聊要给大家翻译题面 A. Maximum Square 简单题意: 有$n$条长为$a_i$,宽为1的木板,现在你可以随便抽几个拼在一起,然后你要从这一 ...

随机推荐

  1. c#|创建一个简单的窗体项目

  2. 洛谷2151 [SDOI2009]HH去散步(矩阵快速幂,边点互换)

    题意:HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是个喜欢变化 ...

  3. Gradio-Lite: 完全在浏览器里运行的无服务器 Gradio

    Gradio 是一个经常用于创建交互式机器学习应用的 Python 库.在以前按照传统方法,如果想对外分享 Gradio 应用,就需要依赖服务器设备和相关资源,而这对于自己部署的开发人员来说并不友好. ...

  4. ETL-txt数据转换为Excel数据

    前言:   将txt文件中的数据抽取出来,然后装载到Excel中. 具体操作步骤:   数据准备 id,name,age,gender,province,city,region,phone,birth ...

  5. HDFS存储原理

    冗余数据保存问题: 一个数据块默认被保存三次 好处:1.加快数据传输错误(假如要同时访问数据块1 因为他冗余存储就会有3份 所以会加快数据传输速度) 2.很容易检查数据错误 3.保证数据可靠性 数据的 ...

  6. RabbitMQ入门到进阶

    1.MQ简介 MQ 全称为 Message Queue,是在消息的传输过程中保存消息的容器.多用于分布式系统 之间进行通信. 2.为什么要用 MQ 1.流量消峰 没使用MQ 使用了MQ 2.应用解耦 ...

  7. Flask-SQLAlchemy常用新旧查询语法对比

    https://docs.sqlalchemy.org/en/20/tutorial/data.html 新旧版语法的说明 在2.x的SQLALchemy中,查询语法为: db.session.exe ...

  8. 使用容器快速在阿里云 ECS 多节点上搭建 Citus 12.1 集群

    阿里云 ECS 机器节点 这里我们使用两台同一区域的 ECS 机器. 机器配置:2 核 2 G.(ps: 阿里云 99 元一年的活动) 一台安装 coordinator(协调器),这里内网 IP 为 ...

  9. 通过JDK动态代理类实现一个类中多种方法的不同增强

    1.为什么说JDK动态代理必须要实现当前父接口才能使用 JDK动态代理是基于接口的代理,它要求目标类(被代理的类)必须实现一个或多个接口.这是因为JDK动态代理是通过创建目标类的接口的代理对象来实现的 ...

  10. 国产Geoscene Server 4.0编译SOE总结

    背景:公司一直使用Arcgis Server 10.1.Visual Studio 2010开发SOE功能,随着国产化软件发展大趋势,SOE中的各种分析功能,需要升级到Geoscene Server环 ...