当前位置: 首页 > news >正文

【CF】Day57——Codeforces Round 955 (Div. 2, with prizes from NEAR!) BCD

B. Collatz Conjecture

题目:

思路:

简单模拟

很简单的模拟,我们只需要快速的找到下一个离 x 最近的 y 的倍数即可(要大于 x)

这里我们可以这样写 add = y - (x % y),这样就知道如果 x 要变成 y 的倍数还要增加多少个数

然后模拟即可

注意,这样操作有限次后如果 k 足够,那么最后 x 一定会变成 1,此时将进入一个循环,每经过 k - 1 此后 x 又会变成 1,这样我们就能很快算出来了

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"void solve()
{int x, y, k;cin >> x >> y >> k;while (k && x!= 1){int add = min(k, y - (x % y));x += add;k -= add;while (x % y == 0){x /= y;}}k %= (y - 1);x += k;while (x % y == 0){x /= y;}cout << x << endl;
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}

C. Boring Day

题目:

思路:

双指针练习题

 由于我们只能从左往后选,那么可以想到使用双指针来解决

我们定义双指针 L~R

sum < l,那么就增加右指针继续选

sum >= l && sum <= r,那么就结束选择,并且清零

sum > r,那么就增加左指针并且要减去之前的左指针的值

为什么这样呢?这其实是贪心的想法,因为我们要尽可能选的多,所以我们到了就立马结束,同时如果不行的话,由于我们只能从左往右选,所以我们删去左边的是正确的,且能给后面更多机会

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"void solve()
{int n, l, r;cin >> n >> l >> r;vector<int> a(n + 5, 1e18);int res = 0;for (int i = 0; i < n; i++){cin >> a[i];}int L = 0, R = -1, sum = 0;while (L < n && R < n){if (sum >= l && sum <= r){res++;L = R + 1;sum = 0;}else if (sum < l){R++;sum += a[R];}else if (sum > r){sum -= a[L];L++;}}cout << res << endl;
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}

D. Beauty of the mountains

题目:

思路:

二维前缀和 + 裴蜀定理

这题目乍一看我们好像没啥思路,我们来简单分析一下试试

首先如果要改某个变 k*k 子矩阵中的数字,那么肯定有 \triangle h = c*(cnt_1 - cnt_0),其中cnt是这个子矩阵内 0/1 的数量,c 是一个任意变量

那如果我们所有可能加起来我们会发现有以下式子

c_0*(cnt1_0 - cnt0_0) + c_1*(cnt1_1 - cnt0_1) + c_2*(cnt1_2 - cnt0_2) + ... = \triangle h

其中每个 c 都是未知量,但是每个子矩阵的 cnt1 和 cnt0 都是已知量,且最后 h 的变化量一定就是我们所需要改变的量,那么就可以化为

ax_1 + bx_2 + cx_3 + ... = \triangle h

仔细观察这个式子,我们可以发现这其实就是多个未知量时的裴蜀定理

那么有解条件就是满足 gcd(a,b,c,...) | h = 0

所以我们可以先将所有可能的子矩阵的cnt0和cnt1记录下来,然后枚举每一个子矩阵来计算常数 abc.. 最后跑一边 gcd 然后看看是否能同余 h 为 0即可

具体的,我们使用一个二维前缀和来记录 i*j 矩阵中的 1 的数量,这样 0 的数量就是 k * k - cnt1,然后我们枚举每一个k*k子矩阵的起点即可

实现部分看代码,有点细节

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"int gcd(int a,int b)
{return !b ? a : gcd(b, a % b);
}void solve()
{int n, m, k;cin >> n >> m >> k;vector<vector<int>> a(n+1, vector<int>(m+1));for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> a[i][j];}}vector<string> s(n+1);for (int i = 1; i <= n; i++){cin >> s[i];s[i] = " " + s[i];}int diff = 0;vector<vector<int>> pre(n+2, vector<int>(m+1,0));for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){pre[i][j] = pre[i-1][j] + pre[i][j-1] - pre[i-1][j-1];if (s[i][j] == '1'){pre[i][j]++;diff += a[i][j];}else{diff -= a[i][j];}}}if (diff == 0){yes;return;}int g = 0;k--;for (int i = 1; i <= n - k; ++i) {for (int j = 1; j <= m - k; ++j) {int f = pre[i + k][j + k] - pre[i + k][j-1] - pre[i-1][j + k] + pre[i-1][j-1];f = abs((k+1) * (k+1) - 2 * f);g = gcd(g, f);}}if (g == 0 || abs(diff) % g != 0) {no;}else {yes;}
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}

相关文章:

  • 图形化编程如何从工具迭代到生态重构?
  • 腾讯怎样基于DeepSeek搭建企业应用?怎样私有化部署满血版DS?直播:腾讯云X DeepSeek!
  • URP - 深度贴花效果实现
  • 高并发场景下的BI架构设计:衡石分布式查询引擎与缓存分级策略
  • 特伦斯折叠重锤电钢琴:年轻音乐人释放音乐自由的新选择
  • 编写一个处理txt的loader插件,适用于wbepack
  • 配置Hadoop集群环境准备
  • STM32核心机制解析:重映射、时间片与系统定时器实战——从理论到呼吸灯开发
  • 深度 |国产操作系统“破茧而出”:鸿蒙电脑填补自主生态空白
  • linux CUDA与CUDNN安装教程
  • 2025年渗透测试面试题总结-渗透测试红队面试七(题目+回答)
  • Linux 上安装RabbitMQ
  • HNUST软件测试B考前最终复习
  • 重构金融数智化产业版图:中电金信“链主”之道
  • Oracle 19c 静默安装
  • Bash 执行命令的基本流程
  • 智能手表测试计划文档(软/硬件)
  • 《Python星球日记》 第64天:NLP 概述与文本预处理
  • 14.three官方示例+编辑器+AI快速学习webgl_buffergeometry_instancing_interleaved
  • Spark,hadoop 集群的常用命令
  • 6连败后再战萨巴伦卡,郑钦文期待打出更稳定发挥
  • 影子调查丨三名“淘金客”殒命雪峰山:千余废弃金矿洞的监管难题
  • 美英贸易协议|不,这不是一份重大贸易协议
  • 梅花奖在上海|穿上初演时的服装,“鹮仙”朱洁静再起飞
  • 河南洛阳新安县煤渣倾倒耕地:多年难恢复,为何至今未解决?
  • 复旦相辉堂上演原创历史人物剧《王淑贞》,胡歌参演