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

题山采玉:Day2

嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的passion。准备好和我一起冲进代码的奇幻宇宙了吗?Let's go!

我的博客:yuanManGan

我的专栏:C++入门小馆 C言雅韵集 数据结构漫游记  闲言碎语小记坊 题山采玉 领略算法真谛

P1948 [USACO08JAN] Telephone Lines S - 洛谷

P4942 小凯的数字 - 洛谷

P7912 [CSP-J 2021] 小熊的果篮 - 洛谷

P4057 [Code+#1] 晨跑 - 洛谷

P4057 [Code+#1] 晨跑

这道题就很简单了,题目搞这么长浪费时间,就直接求这三个数的lcm就可以了。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>using namespace std;
typedef long long LL;
LL gcd(LL a, LL b)
{return b ? gcd(b, a % b) : a;
}
LL lcm(LL a, LL b)
{return a * b / gcd(a, b);
}
int main()
{LL a, b, c; cin >> a >> b >> c;cout << lcm(lcm(a, b), c) << endl;return 0;
}

 

P4942 小凯的数字

题目要求从l到r构成一个数字,然后这个数字mod9的结果,我们注意到l和r的数据范围是1e12,很明显,我们至少要采用O(logn)的时间复杂度,能做到O(1)更好。

当 l和 r都是个位数时,比如l为3,r为6

我们得到的数是3456

我们用秦九韶算法把这个数拆开就是

((((3 *10+ 4)*10) + 5)*10)+6我们对这个结果去模9就成了

(((((3 *10%9+ 4)*10%9) + 5)*10%9)+6)%9

我们发现结果就是(3 + 4 + 5 + 6)% 9

我们仅仅需要对这个区间的和取模就可以,用前n项和公式即可,那当我们r为两位或者更多位的时候还成立吗,答案依旧成立。

这里还有一个细节要处理,我们的前n项和公式是(a1 + an)/2 * n

也就是 (r + l)(l - r + 1)/2 %9,这里要除以2再取模那我们是不是要用乘法逆元呢,其实不用,r + l 和l - r + 1必定有一个数是2的倍数。 

#include <iostream>using namespace std;
typedef long long LL;int main()
{int q; cin >> q;while (q--){LL l, r; cin >> l >> r;LL x = l + r, y = r - l + 1;LL ret;if (x % 2 == 0) ret = x / 2 % 9 * y % 9;else ret = y / 2 % 9 * x % 9;cout << ret << endl;}return 0;
}

P7912 [CSP-J 2021] 小熊的果篮

这道题的思路很好想但实现起来有点困难,我们这里用set来实现一下吧,我们定义两个set一个存储值为0的下标,另一个存储值为1 的下标。我们先判断一下两个set里面谁的第一个元素小也就是下标最小的,因为set是默认按照升序排序的,这里找到谁更小就代表那个元素要先出来,比如第一个set里面有最小的他代表的是0,我们就要去另一个set找最小的,但这个最小的要比我们刚刚找的要大,重复操作直到找不到。

按照这个模拟即可。

#include <iostream>
#include <set>using namespace std;set<int> s[2];
int main()
{int n; cin >> n;for (int i = 1; i <= n; i++){int x; cin >> x;s[x].insert(i);}while (s[0].size() || s[1].size()){int p;if (s[1].empty() || (s[0].size() && *s[0].begin() < *s[1].begin()))p = 0;else p = 1;int x = 0;while (1){auto t = s[p].upper_bound(x);if (t == s[p].end()) break;x = *t;cout << *t << " ";s[p].erase(t);p = !p;}cout << endl;}return 0;
}

P1948 [USACO08JAN] Telephone Lines S

我们仅需连同1节点和n号节点即可,我们可以免费连接k个路线,多出来的路线按照最大的付钱,

1 ∼ n 的路径中,⽀付的费⽤为 x ,⼤于 x 的边的条数为 y 。根据题意,易得:
x 在增⼤的时候,所选的路径中,⼤于 x 的边的条数 y 在减⼩;
x 在减⼩的时候,所选的路径中,⼤于 x 的边的条数 y 在增⼤。
那么,本题就有⼆段性,设最终结果为 ,表⽰⽀付费⽤为 时,恰好能选出 条⼤于 的
边,于是:
x < ret 时,选的⼤于 x 的边的数量增加,此时⼤于 x 的边的数量会⼤于 k
x ret 时,选的⼤于 x 的边的数量减⼩,此时⼤于 x 的边的数量会⼩于等于 k

我们可以将大于x的边的边权为1,小于的定义为0,这时我们就可以采用01bfs来解决,01bfs的时间复杂度为n,二分的时间复杂度为logn,时间复杂度为n*logn刚刚好,我们就来解决一下吧。

#include<iostream>
#include<cstring>
#include<deque>
#include<vector>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
int n, p, k;
const int N = 1e3 + 10;
vector<PII>edges[N];
int dist[N];
bool st[N];
bool check(int x)
{memset(dist, 0x3f, sizeof dist);memset(st, 0, sizeof st);deque<int> q;q.push_back(1);dist[1] = 0;while (q.size()){int a = q.front(); q.pop_front();if (st[a]) continue;st[a] = true;for (auto t : edges[a]){int b = t.first, c = t.second > x ? 1 : 0;if (dist[a] + c < dist[b]){dist[b] = dist[a] + c;if (c) q.push_back(b); else q.push_front(b);}}}return dist[n] <= k;
}
int main()
{cin >> n >> p >> k;for (int i = 1; i <= p; i++){int a, b, c; cin >> a >> b >> c;edges[a].push_back({ b,c });edges[b].push_back({ a,c });}int l = 0, r = 1e6;while (l < r){int mid = (l + r) / 2;if (check(mid)) r = mid;else l = mid + 1;}if (dist[n] == 0x3f3f3f3f) cout << -1 << endl;else cout << l << endl;return 0;
}

http://www.lqws.cn/news/138835.html

相关文章:

  • SCI论文核心框架与写作要素小结
  • Java - 数组
  • 高速ADC数据格式与JESD204B IP数据格式映射关系
  • Linux环境基础开发工具使用
  • 【工具使用】STM32CubeMX-FreeRTOS操作系统-任务、延时、定时器篇
  • Visual Studio 2022 在 Windows 11 添加资源时崩溃问题分析与解决方案
  • 数据结构与算法:动态规划中根据数据量猜解法
  • macOS 连接 Docker 运行 postgres,使用navicat添加并关联数据库
  • 【TCP/IP和OSI模型以及区别——理论汇总】
  • 实验设计如何拯救我的 CEI VSR 28G 设计
  • MySQL 8.0 窗口函数全面解析与实例
  • Day44 Python打卡训练营
  • 陈伟霆电视剧《九门》开机 续写传奇热血新篇
  • Apache APISIX
  • DeviceNET从站转EtherNET/IP主站在盐化工行业的创新应用
  • 计算机操作系统知识点总结②
  • APx500录制波形
  • 代码训练LeetCode(22)研究者H指数
  • Python 区块链开发实战:从零到一构建智能合约
  • python 学习笔记
  • Linux I2C 子系统全解:结构、机制与工程实战
  • 区块链架构深度解析:从 Genesis Block 到 Layer 2
  • 数据库表中「不是 null」的含义
  • Numpy——通用函数、向量化、基础的统计计算
  • Elasticsearch中的地理空间(Geo)数据类型介绍
  • 《小明的一站式套餐服务平台》
  • 【网络安全】fastjson原生链分析
  • 制造业数字化转型解决方案及应用
  • 在Mathematica中实现Newton-Raphson迭代的收敛时间算法
  • gitlab rss订阅失败