2025.3.25 Codeforces Round 1013 (Div. 3)

比赛链接

Solved: 7/7

Rank: 42


A. Olympiad Date

题意:给一个数码序列,从前往后取,问取到第几个时凑齐 01032025 这八个数码。

开个桶统计。

void solve(){int n; cin >> n;vector<int> a(n); cin >> a;vector<int> c(10);for (int i=0; i<n; ++i){++c[a[i]];if (c[0] >= 3 && c[1] >= 1 && c[2] >= 2 && c[3] >= 1 && c[5] >= 1){cout << i+1 << '\n';return;}}cout << "0\n";
}

B. Team Training

题意:给一个集合,将其划分为不交子集,定义一个集合的权值为它的大小乘它的最小值。问最多可以划分出几个权值 \(\geq x\) 的子集。

从大到小排序,然后枚举,每次从当前的数开始贪心选最小的权值 \(\geq x\) 的子集。

void solve(){int n, x; cin >> n >> x;vector<int> a(n); cin >> a;sort(all(a));ll m = 0;int ans = 0;for (int i=n-1, j=0; i>=0; --i){++j;m = 1ll * j * a[i];if (m >= x) j=0, ++ans;}cout << ans << "\n";
}

C. Combination Lock

题意:构造一个长度为 \(n\) 的排列,使其每个轮换都恰有一个位置满足 \(p_i = i\)

偶数无解,奇数 \(1,3,\dots,n,2,4,\dots,n-1\)

void solve(){int n; cin >> n;if (n&1){for (int i=1; i<=n; i+=2) cout << i << ' ';for (int i=2; i<=n; i+=2) cout << i << ' ';cout << '\n';}else cout << "-1\n";
}

D. Place of the Olympiad

题意:给一个 \(n\times m\) 的网格黑白染色,使得恰好有 \(k\) 个黑格子,且同一行连续黑格子数的最大值最小。

行之间是独立的,所以每行黑格子数量相等一定更优。
如果一行连续黑格子数量不超过 \(d\),则总的黑格子数最多是 \(\lfloor \frac m{d+1}\rfloor\cdot d + (m\bmod (d+1))\)
二分 \(d\) 即可(应该也可以直接算,懒得推了)。

void solve(){int n, m, k;cin >> n >> m >> k;int q = (k+n-1) / n;int l = 1, r = m, ans = 0;while (l <= r){int mid = (l+r) >> 1;if (q <= (m/(mid+1)) * mid + (m%(mid+1))) ans = mid, r = mid-1;else l = mid+1;}cout << ans << '\n';
}

E. Interesting Ratio

题意:给 \(n\),求满足 \(\frac{\text{lcm}(a,b)}{\gcd(a,b)}\) 为质数的 \((a,b)\) 无序对数。\(n\leq 10^7\)

题目的条件等价于 \(b = pa\)\(p\) 为质数。

const int N = 1e7+5;
bool np[N];
int pri[N], cnt = 0, pi[N];
void init(int n) {for (int i=2; i<=n; ++i){if (!np[i]) pri[++cnt] = i;for (int j=1; j<=cnt && i*pri[j] <= n; ++j){np[i*pri[j]] = 1;if (!(i%pri[j])) break;}}for (int i=2; i<=n; ++i) pi[i] = pi[i-1] + !np[i];
}void solve(){int n; cin >> n;ll ans = 0;for (int i=1; i<=n; ++i) ans += pi[n/i];cout << ans << '\n';
}

F. Igor and Mountain

题意:给一个黑白网格。定义合法路径需要满足:只经过黑色格子,起点在最后一行终点在第一行,每行至少经过一个格子至多经过两个格子,路径上相邻两个格子距离不超过 \(d\)。求合法路径数量。

dp,设 \(f(i,j)\) 表示最后一个格子在 \(i\)\(j\) 列的方案数。前缀和优化。

const int N = 2005;
int n, m, d;
string a[N];
ll f[N][N], g[N], h[N];void solve(){cin >> n >> m >> d;for (int i=1; i<=n; ++i) cin >> a[i], a[i] = " " + a[i];for (int i=n; i>=1; --i){for (int j=1; j<=m; ++j){g[j] = (g[j-1] + (a[i][j] == 'X' ? (i == n ? 1 : f[i+1][min(m, j+d-1)] - f[i+1][max(0, j-d)] + mod) : 0)) % mod;}for (int j=1; j<=m; ++j){h[j] = (h[j-1] + (a[i][j] == 'X' ? g[min(m, j+d)] - g[max(0, j-d-1)] + mod : 0)) % mod;}for (int j=1; j<=m; ++j) f[i][j] = h[j];}cout << f[1][m] << '\n';
}

G. Gleb and Boating

题意:数轴 \([0,s]\),你初始在 \(0\),要达到 \(s\)。你的初始速度为 \(v=k\),面朝正方向。每一步可以向面朝的方向走 \(v\) 的长度或者转向并令 \(v\) 减一(如果 \(v\) 已经是 \(1\) 就不减了),不能连续转向。问恰好到 \(s\)\(v\) 的最大值。\(s\leq 10^9, k\leq 1000\)

dp,设 \(f(i,j)\) 表示速度为 \(i\) 能达到的模 \(i\)\(j\) 的最远位置。这里“最远”当面朝正向时表示最左端,面朝反向时表示最右端。则转移可以枚举速度是 \(i+1\) 时最后的位置和走的步数。步数只需要枚举到 \(i\) 因为后面的点是都可以达到的。

const int N = 1005;
int s, k, f[N][N];
void solve(){cin >> s >> k;for (int i=1; i<=k; ++i)for (int j=0; j<i; ++j){if ((k-i) & 1) f[i][j] = -1;else f[i][j] = s+1;}f[k][0] = k;for (int i=k-1; i>0; --i){if ((k-i) & 1){for (int j=0; j<=i; ++j) if (f[i+1][j] <= s){int R0 = f[i+1][j], R = R0 + (s - R0) / (i+1) * (i+1);for (int o=0; o<=i && R >= i && R >= R0; ++o, R -= i+1)f[i][R % i] = max(f[i][R % i], R - i);}}else{for (int j=0; j<=i; ++j) if (f[i+1][j] >= 0){int L0 = f[i+1][j], L = L0 - L0 / (i+1) * (i+1);for (int o=0; o<=i && L <= s-i && L <= L0; ++o, L += i+1)f[i][L % i] = min(f[i][L % i], L + i);}}}for (int i=k; i>0; i -= 2){for (int j=0; j<i; ++j)if (f[i][j] <= s && (s - f[i][j]) % i == 0){cout << i << '\n';return;}}cout << "1\n";
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/905749.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何保证消息队列的消息只能被消费一次

如何保证消息队列的消息只能被消费一次,首先先保证消息不会丢失 首先先生产者到消费者到消费者有哪些场景会消息丢失一、问题场景 场景一、生产者发送到消息队列失败 场景二、消息队列接受到消息磁盘化失败 场景三、消费者接受到消息消费失败 二、场景原因,如何解决 1、场景一…

Day22_java方法

Java方法 方法重载 package com.xiang.method;public class Demo02 {public static void main(String[] args) {int max = max(20, 100, 10);System.out.println(max);}// 比大小public static int max(int num1,int num2){int result = 0;if (num1 == num2){System.out.printl…

文献阅读《Spectral Networks and Deep Locally Connected Networks on Graphs》

参考博客 第一代图卷积网络:图的频域网络与深度局部连接网络 - 知乎 (zhihu.com) 论文解读一代GCN《Spectral Networks and Locally Connected Networks on Graphs》 - 别关注我了,私信我吧 - 博客园 (cnblogs.com) 论文核心 卷积神经网络得益于所处理的数据具有局部平移不变…

【CodeForces训练记录】Codeforces Round 1013 (Div. 3)

训练情况赛后反思 A题题目读半天,发现日期有前导零,div3还是比较基础一点,但是感觉自己还是不够熟练,D题看出来二分但是调了挺久的 A题 判断取多少个数之后才能构成 20250301,我们维护数字的出现次数,直到所有数字的出现次数全部大于等于 20250301 的出现次数时输出位置即…

字符串问题的江湖奇宝:进制哈希

江湖中,剑客以快制胜,而算法竞赛里,字符串哈希(String Hashing)便是那柄出招如电的快剑。 各种字符串问题纷乱复杂,各种字符串算法招式繁复,需苦练内功心法。但字符串哈希算法却只凭一招:将字符串化作数字,以数论为刃,至简之道斩尽来犯之敌。 但此招并非无懈可击。若…

HW-1

1.选项A是正确的,它表示的是极小项m6的正确形式。极小项m6对应的是变量a=0,b=1,c=1,d=0的情况,因此其表达式应为(\overline{a} \cdot b \cdot c \cdot \overline{d}),即选项A。 其他选项的分析:选项B是一个或项,不符合极小项的定义。 选项C缺少变量a和d,不是一个完整的…

为什么nn.Linear 的weight 是 (out_features, in_features)

在PyTorch的nn.Linear中,权重矩阵的形状为(out_features, in_features)。这是因为线性变换的实现方式为:具体来说:当创建nn.Linear(10, 60)时,in_features=10,out_features=60,因此权重的形状是(60, 10)。 输入张量t的形状为(2, 5, 10),与转置后的权重a.weight.T(形状(…

字符串问题的终极法宝:进制哈希

江湖中,剑客以快制胜,而算法竞赛里,字符串哈希(String Hashing)便是那柄出招如电的快剑。 各种字符串问题纷乱复杂,各种字符串算法招式繁复,需苦练内功心法。但字符串哈希算法却只凭一招:将字符串化作数字,以数论为刃,至简之道斩尽来犯之敌。 但此招并非无懈可击。若…

布局机器人,vivo用三十年技术沉淀回答“时代之问”

科技创新给产业界带来最大的影响就是“跨界焦虑”。不敢错过,这是企业面对风口的普遍心态。生怕一波没跟上,就被时代淘汰了。 但不错过,并不等于抓得住。比如元宇宙概念经历资本狂欢,无数科技巨头卷入,退潮时一地鸡毛。再比如在新能源汽车赛道卷起千亿投资风暴时,也有很多…

石油化工厂区防爆入侵报警系统

石油化工厂区防爆入侵报警系统采用AI智能防爆预警摄像头嵌入AI人体识别深度算法,对人体目标特征的检测分析识别预警。系统设备采用AI算法,通过大量真实的场景样本训练后,能够在各种应用场景下及时准确地对场景中发生的人体入侵行为发出告警信息。通过对实时视频图像进行智能…