建议访问原文出处,获得更佳浏览体验。
原文出处:https://hyp1231.github.io/2018/07/28/20180728-cfround499div2/
A. Stages
题意
给一个长度为 的字符串,让你从中选出 个字母从小到大排成一列。要求相邻字母的 码之差不小于 。且这 个字母的 码之和最小。如果找不出这样的 个字母,输出 。
链接
题解
贪心地优先选择满足题意的
码最小的字母。
先排序,然后做
次选取。每次选出最小的字母,然后删掉原字符串中,与这个字母之差小于
的字母。
如果不能做
次选取,则输出
。
代码
#include <cstdio>
#include <algorithm>
#include <queue>
const int N = 64;
int n, k;
char s[N];
int main() {
scanf("%d%d%s", &n ,&k, s);
std::sort(s, s + n);
std::queue<char> que;
for (int i = 0; i < n; ++i) que.push(s[i]);
int cnt = 0, ans = 0;
while (cnt < k && !que.empty()) {
char c = que.front(); que.pop();
ans += c - 'a' + 1;
++cnt;
while (!que.empty() && que.front() - c < 2) que.pop();
// 删除原串中与被选字母之差小于 2 的字母
}
printf("%d\n", cnt == k ? ans : -1);
// 若没有完成 k 次选取,输出 -1
return 0;
}
B. Planning The Expedition
题意
个宇航员, 份粮食,第 份粮食的种类为 。每个宇航员每天吃一份粮食,且旅程中这个宇航员只能吃一种粮食。不同的宇航员吃的粮食种类可以不同。求旅程最多满足几天的口粮。
链接
题解
数据规模较小,因此可以枚举天数
。
记第
种口粮有
份,则在旅程中这种口粮可供
个宇航员食用(注意是整数除法)。
因此可以养活的宇航员的最大数目为
,判断这个数目与
的大小关系即可。
输出满足条件的最大的
。
代码
#include <iostream>
const int N = 128;
int n, m, a[N], cnt[N]; // cnt[i]: 第 i 种口粮的份数
int main() {
std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
std::cin >> n >> m;
for (int i = 0; i < m; ++i) {
std::cin >> a[i];
++cnt[a[i]];
}
for (int i = m / n; i > 0; --i) { // 口粮最多供应 m / n 天
int sum = 0;
for (int j = 1; j <= 100; ++j) {
sum += cnt[j] / i;
}
if (sum >= n) {
std::cout << i << std::endl;// 满足条件,输出这个最大天数
return 0;
}
}
std::cout << 0 << std::endl; // 没有满足条件的天数,输出 0
return 0;
}
C. Fly
题意
有
个行星,标号
。飞行器从
出发,经过
到达
,再从
出发到达
。
飞行器重
吨,且其携带的燃油也有重量。每次飞行器从行星
起飞,每消耗
吨燃油可以支持
的重量;每次飞行器降落在行星
,每消耗
吨燃油可以支持
的重量。只有飞行器拥有可以支撑当前总重量(飞行器重量
当前燃油重量)的燃油时,才可以成功起飞或降落。可以认为起飞和降落瞬间完成。
求旅程开始时携带燃油的最小吨数。
链接
题解
详见 「Codeforces 1010A」Fly - 二分答案
D. Rocket
题意
交互式题目,通过和机器的沟通猜一个正整数
。
每次你询问一个正整数
,机器理应返回的正确答案为
但是机器有些故障,他有时返回和正确答案互为相反数的结果,这个规律通过长度为
的数列
描述。数列
的每一项是
或者是
。对于第
次询问,如果数列的第
项是
,则返回相反的答案;否则返回正确答案。
现在你可以给出最多
次询问,根据机器返回的值确定这个要猜测的数字
。
链接
题解
详见 「Codeforces 1010B」Rocket - 交互式 + 二分
E. Border
题意
给出钞票面额的种类数 ,第 种钞票的面额为 。这 种面额的钞票你均有无限张。现在让你求出,对这些钞票进行任意组合,得到总金额的 进制表示后,有可能的个位数字。
链接
题解
详见 「Codeforces 1010C」Border - 群论
F. Mars rover
题意
给出一个以
为根的有
个节点的树,树的每个节点表示一个输入,或者一个逻辑关系。每个逻辑关系根据儿子节点的值,套入逻辑关系式,计算出当前节点的值。
现在让你求出,只改变任一个输入节点的值,根节点的取值。