摘要: 原题链接 1.审题 1.使得转账后 B 收到 100 元。 2.互相转账 3. z%的手续费(z<100) 2.思路 1.dijkstra算法(很讨厌这种算法名字):把已探访过的点的下一个点中“ ‘还没探访过的点’的更新”放进堆里,堆里弹出未探访点的第一个更新便是该点的最值 2.准备工作,把所有的边 阅读全文
posted @ 2023-12-06 14:51 纯粹的 阅读(70) 评论(0) 推荐(0)
摘要: 不能用dijkstra算法 的原因(个人拙见): 题解 1.思想导论 对于没有负环的图中能到达的任意一个节点,从1出发的最短路径,途中经过的点至少有2个,最多为n个(包括两端)。 设经过的点数为路径的长度 2.思想落实 设cnt[i]为到达i的最短路径的最大长度,每更新一次长度,就更新一次cnt[i 阅读全文
posted @ 2023-12-06 11:40 纯粹的 阅读(22) 评论(0) 推荐(0)
摘要: 原题链接 不知道这个思想叫什么,应该叫结果思想 导论 如果存在一个最长的字符串,我又没有可能把他消掉? 答案是,只要其他字符的长度大于等于最长字符串的长度,就一定能把他消掉。 所以我们不考虑字符串是怎么消除的,直接看结果。 原因解释如下 1.该最长字符串一定和其他字符相连,则消除操作显然。 2.如果 阅读全文
posted @ 2023-12-06 10:21 纯粹的 阅读(93) 评论(1) 推荐(1)
摘要: 1.原理 对于每一次函数调用,选当前数组的第一个元素为标准值,遍历数组,把所有小于标准值的元素放到标准元素的左边,大于等于标准值的元素放到右边。知道调用函数中的数组长度小于2。 2.为何使用 1).虽然时间复杂度不稳定->(O2),但是在许多应用场景中,我们并不需要稳定性。 2).没有病态的比较,即 阅读全文
posted @ 2023-12-04 22:22 纯粹的 阅读(106) 评论(0) 推荐(0)
摘要: 原题链接 题解 1.字典树 虽然此做法时间效率空间效率代码效率都不占优,但是必须要了解一下。 阅读全文
posted @ 2023-11-30 15:28 纯粹的 阅读(19) 评论(0) 推荐(1)
摘要: 原题链接 详解见题解区,个人见解见代码,蒟蒻真的折服于dalao的思路 #include<bits/stdc++.h> #define ll long long using namespace std; ll dp[20][210][1026]={0}; ll counts(int now) { l 阅读全文
posted @ 2023-11-29 20:59 纯粹的 阅读(31) 评论(0) 推荐(1)
摘要: 原文链接 枚举即可 #include<bits/stdc++.h> #define ll long long using namespace std; int s[14]={0}; int main() { ll n; scanf("%lld",&n); for(int i=1;i<=9;i++)s 阅读全文
posted @ 2023-11-28 20:50 纯粹的 阅读(32) 评论(0) 推荐(1)
摘要: 原题链接 非常详细的题解见洛谷,个人见解见代码 方法一:倍增法 #include<bits/stdc++.h> using namespace std; #define N 500005 vector<int> G[N];//链树,以链上的元素为根节点的树 void add(int x,int y) 阅读全文
posted @ 2023-11-28 19:15 纯粹的 阅读(39) 评论(0) 推荐(1)
摘要: 原题链接 题解 每次从所有果子堆中选重量最小的两堆并累加,观察到只需要找出 最小 因此考虑用堆,而当你对于堆的理解足够深之后,可以用c++ 的 priority_queue 代码 #include<bits/stdc++.h> using namespace std; int pile[10005] 阅读全文
posted @ 2023-11-26 16:58 纯粹的 阅读(62) 评论(0) 推荐(1)
摘要: 1. 利用map实现速查,优点是代码简洁,缺点是速度慢,内存大 #include<bits/stdc++.h> using namespace std; int a[200005]={0}; int main() { int n,c; scanf("%d%d",&n,&c); map<int,int 阅读全文
posted @ 2023-11-26 16:28 纯粹的 阅读(34) 评论(0) 推荐(0)