注: G 暂时不会

A

题目大意

一个正整数\(k\),如果对于任意不小于\(k\)的数\(n\),都能写出长度为\(k\)且总和为n的回文数组,则输出YES,否则输出NO。

解题思路

  • \(k\)是奇数,输出YES。
  • \(k\)是偶数,输出NO。

代码实现

#include<bits/stdc++.h>

void Main() {
int n;
std::cin >> n;
if (n & 1) {
std::cout << "YES" << '\n';
} else {
std::cout << "NO" << '\n';
}
} int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0), std::cout.tie(0);
int T = 1;
std::cin >> T;
while (T--) {
Main();
}
return 0;
}

B

题目大意

一个正整数\(n\),各个数位之和为\(m\),它的代价为\(n\div m\)。

为了使代价减小,可以删除某些数位,但是最后不能为\(0\)。

输出代价最小时,删除数字的最小数量。

解题思路

  • \(n\)很大,需要高精度。
  • 分子和分母都为正整数,所以最小代价就是\(1\),只剩下一个数字。
  • 找到不是\(0\)的最低数位,删掉高位的非零数和低位的\(0\)。

代码实现

#include<bits/stdc++.h>

void Main() {
std::string s;
std::cin >> s;
int n = s.size();
for (int i = n - 1; i >= 0; i--) {
if (s[i] != '0') {
std::cout << n - 1 - count(s.begin(), s.begin() + i, '0') << '\n';
return;
}
}
} int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0), std::cout.tie(0);
int T = 1;
std::cin >> T;
while (T--) {
Main();
}
return 0;
}

C

题目大意

正整数\(x,k\),\(y\)是\(x\)的十进制重复\(k\)次,如果\(y\)是质数,输出YES,否则输出NO。

解题思路

  • 当\(x=1,k=1\)时,输出NO。
  • 当\(x\geq 2,k\geq 2\)时,\(y=x\times (p^{k-1}+p^{k-2}+\cdots+p^{1}+p^{0})\),\(p\)是比\(x\)大的最小的10的次幂。

    所以\(y\)一定有因子\(x\),输出NO。
  • 其他情况,暴力判断因子。
  • 时间复杂度\(O(t\times \sqrt{x})\)。

代码实现

#include<bits/stdc++.h>

void Main() {
int x, k;
std::cin >> x >> k;
if (x >= 2 && k >= 2) {
std::cout << "NO" << '\n';
return;
}
if (x == 1) {
if (k == 1) {
std::cout << "NO" << '\n';
return;
}
int y = 0;
for (int i = 0; i < k; i++) {
y = y * 10 + 1;
}
for (int i = 2; i * i <= y; i++) {
if (y % i == 0) {
std::cout << "NO" << '\n';
return;
}
}
std::cout << "YES" << '\n';
return;
}
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) {
std::cout << "NO" << '\n';
return;
}
}
std::cout << "YES" << '\n';
} int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0), std::cout.tie(0);
int T = 1;
std::cin >> T;
while (T--) {
Main();
}
return 0;
}

D

解题思路

  • 递归分治
  • 标准的板子题,就是代码不太好写。

代码实现

#include<bits/stdc++.h>

using i64 = long long;

i64 find(i64 i, int lx, int ly, int rx, int ry, int a, int b) {
if (lx == a && ly == b) {
return i;
}
int midx = lx + rx >> 1, midy = ly + ry >> 1;
i64 sum = (1LL * midx - lx + 1) * (1LL * midy - ly + 1);
if (a <= midx && b <= midy) {
return find(i, lx, ly, midx, midy, a, b);
}
if (a <= midx && b > midy) {
return find(i + 3 * sum, lx, midy + 1, midx, ry, a, b);
}
if (a > midx && b <= midy) {
return find(i + 2 * sum, midx + 1, ly, rx, midy, a, b);
}
return find(i + sum, midx + 1, midy + 1, rx, ry, a, b);
} std::pair<int, int> get(i64 d, i64 l, i64 r, int lx, int ly, int rx, int ry) {
if (lx == rx && ly == ry) {
return {lx, ly};
}
i64 k = (r - l + 1) >> 2;
int midx = lx + rx >> 1, midy = ly + ry >> 1;
if (d < l + k) {
return get(d, l, l + k - 1, lx, ly, midx, midy);
}
if (d < l + 2 * k) {
return get(d, l + k, l + 2 * k - 1, midx + 1, midy + 1, rx, ry);
}
if (d < l + 3 * k) {
return get(d, l + 2 * k, l + 3 * k - 1, midx + 1, ly, rx, midy);
}
return get(d, l + 3 * k, r, lx, midy + 1, midx, ry);
} void Main() {
int n, q;
std::cin >> n >> q;
while (q--) {
std::string op;
int x, y;
i64 d;
std::cin >> op;
if (op == "->") {
std::cin >> x >> y;
std::cout << find(1, 1, 1, 1 << n, 1 << n, x, y) << '\n';
} else {
std::cin >> d;
auto [dx, dy] = get(d, 1, (1LL << n) * (1LL << n), 1, 1, (1 << n), (1 << n));
std::cout << dx << " " << dy << '\n';
}
}
} int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0), std::cout.tie(0);
int T = 1;
std::cin >> T;
while (T--) {
Main();
}
return 0;
}

E

题目大意

一个长度为\(n\)的数组\(a\),将数组划分成\(k\)段子数组,代价\(x\)为每段\(mex\)中的最小值。

划分时使\(x\)尽可能大,输出\(x\)的最大值。

解题思路

  • 二分答案
  • check时,遇到\(mex\geq x\)就重新开一段,判断能否划分成\(k\)段及以上。

代码实现

#include<bits/stdc++.h>

void Main() {
int n, k;
std::cin >> n >> k;
std::vector<int> a(n);
for (int i = 0; i < n; i++) {
std::cin >> a[i];
}
int l = 0, r = n; auto check = [&] (int x) -> bool {
int cnt = 0, mex = 0;
std::vector<bool> mp(x);
for (int i = 0; i < n; i++) {
if (a[i] < x) {
mp[a[i]] = 1;
}
while (mp[mex]) {
mex++;
}
if (mex >= x) {
mex = 0;
cnt++;
fill(mp.begin(), mp.end(), 0);
}
}
return cnt >= k;
}; while (l < r) {
int mid = l + r + 1 >> 1;
if (check(mid)) {
l = mid;
} else {
r = mid - 1;
}
}
std::cout << l << '\n';
} int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0), std::cout.tie(0);
int T = 1;
std::cin >> T;
while (T--) {
Main();
}
return 0;
}

F

解题思路

  • 模拟
  • chose存下神经网络\(i\)可以处理的位置\(j\),sol存下可以处理第\(j\)位的神经网络\(i\)。
  • 每次选择处理数量最多的神经网络\(pos\),然后把其他神经网络上\(pos\)处理过的位置删掉,这样就可以在下一次直接加\(2\times size\)(操作2变空白,再操作1放上合法的)。

好像做麻烦了,看到很多佬直接\(3\times n-2\times ans\)。

代码实现

#include<bits/stdc++.h>

void Main() {
int n, m;
std::cin >> n >> m;
std::vector<std::string> a(n);
std::vector b(m, std::vector<std::string>(n));
for (int i = 0; i < n; i++) {
std::cin >> a[i];
}
std::vector<std::set<int>> chose(m);
std::vector<std::vector<int>> sol(n);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
std::cin >> b[i][j];
if (b[i][j] == a[j]) {
chose[i].insert(j);
sol[j].push_back(i);
}
}
}
int ans = 0;
for (int s = 0; s < n; ) {
int pos = 0;
for (int i = 0; i < m; i++) {
if (chose[i].size() > chose[pos].size()) {
pos = i;
}
}
if (chose[pos].empty()) {
std::cout << -1 << '\n';
return;
}
if (!ans) {
ans = n;
s += chose[pos].size();
} else {
ans += 2 * chose[pos].size();
s += chose[pos].size();
}
for (auto i : chose[pos]) {
for (auto j : sol[i]) {
if (j != pos) {
chose[j].erase(i);
}
}
}
chose[pos].clear();
}
std::cout << ans << '\n';
} int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0), std::cout.tie(0);
int T = 1;
std::cin >> T;
while (T--) {
Main();
}
return 0;
}

Codeforces Round 1016 (Div. 3)的更多相关文章

  1. Codeforces Round #297 (Div. 2)E. Anya and Cubes 折半搜索

    Codeforces Round #297 (Div. 2)E. Anya and Cubes Time Limit: 2 Sec  Memory Limit: 512 MBSubmit: xxx  ...

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

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

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

  4. Codeforces Round #368 (Div. 2)

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

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

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

  6. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  7. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  8. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  9. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

  10. Codeforces Round #268 (Div. 2) ABCD

    CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

随机推荐

  1. Spring Boot中如何读取resources目录下的文件

    在Java编码过程中,我们常常希望读取项目内的配置文件,按照Maven的习惯,这些文件一般放在项目的src/main/resources下.因此,我们把合同的PDF模板存放于resources/tem ...

  2. 2025盘古石决赛-计算机&手机

    手机取证 分析鸿蒙手机检材,打网球定的日期是?[标准格式:4月5日] 在日历数据中 3月3日 分析鸿蒙手机检材,哪个浏览器搜索过鸿蒙开发教程?[标准格式:百度浏览器] uc数据搜索过 UC浏览器 分析 ...

  3. Visual Studio 2022 中的 EF Core 反向工程和模型可视化扩展插件

    前言 在 EF 6 及其之前的版本数据库优先模式(Database First)是可以在 Visual Studio 中通过可视化界面来操作完成的,但是到了 EF Core 之后就不再支持了(因为模型 ...

  4. PI发布rest,json接口

    PI接口的开发分成两个部分,第一个部分是ESB(Enterprise Services Builder)部分,这里注意做数据结构定义,接口导入,字段关系映射,定义接口等. 第二部分是IB(Integr ...

  5. http 426 Upgrade Required

    1.很久没做http接口了,都快不会了... 最近遇到一个奇葩的,调用http接口返回空,什么都没有,然后用工具测试,发现能返回消息,不过状态是500... 好奇之下就在代码里加个个取返回状态code ...

  6. 联合省选2025 tj

    联合省选2025 tj d1 t2 实际上只需要把\(x\)能到的点集\(S_x\)和\(Sa_{[l,r]}\)交起来得到\(S\),再找到最大的\(v\)满足\(S\)和\(Sb_{[v,n]}\ ...

  7. Vue 结合Sortablejs实现table行排序

    场景 在一个列表展示页面上,使用了表格组件,原有组件本身不支持拖拽功能,需求要求在列表的基础上支持行拖拽排序.因此引入了Sortablejs插件. 问题及解决方案 引入Sortablejs后刚开始都很 ...

  8. 九、buildroot系统 usb配置

    3.3.usb配置 源码中kernel默认已经打开了相关的usb配置,只需要在buildroot中打开相关配置. 1.基本功能类别 简称 功能描述 ADB (Android Debug Bridge) ...

  9. 深入掌握iostat:运维必备的I/O性能分析利器

    在Linux系统运维中,磁盘I/O性能往往是系统瓶颈的关键来源.iostat作为sysstat工具包中的核心命令,能够实时监控CPU使用率和磁盘I/O统计,是性能诊断不可或缺的工具.本文将全面解析io ...

  10. [Thingsboard] 1. 源码的下载和编译

    一.前言 本文基于 Thingsboard 4.0.2 编写,对应提交Version set to 4.0.2(01c5ba7d37006e1f8a3492afbb3c67d017ca8dd3). 最 ...