其它
death-silent
万物皆虚,万事皆允
展开
-
关于整除和取模运算的定义
简单来说,就是一个整数a,可以表示为一个任意整数b乘一个任意整数n加上一个任意整数r,比如3,就可以表述为1乘2加1,而这个r,就是a mod n所求出来的数。对于任何一个整数a和任何一个正整数n,存在唯一的整数q和r,满足0 ≤ r<n且a=qn+r。a(读作:d整除a)含义是,存在某个整数k,使得a=kb,任何整数均可整除0。算法导论上有一个对mod的完美解释,我觉得这值得我记录下来。为除法的商,值r=a mod n为除法的余数。a当且仅当a mod n=0。...原创 2022-08-07 20:20:19 · 401 阅读 · 1 评论 -
ybtoj 构造完全图 最小生成树 kruskal
题目描述样例数据范围解题思路可以看到极限数据是1e5,所以考虑nlogn算法。完全图:一个图中每一对顶点都直接相连图论题,犹豫不决先画图,然后根据题目要求构造一遍画出来是这样 (不要在意箭头,这是个无向图)然后思考一下怎么构造,发现2和3之间的权值必须比1大,否则最小生成树不唯一假如2和3之间权值是1,那么生成的最小生成树完全可以不要1和3连着的边,可以选2和3的边,一样能生成一个树,所以我们发现,加入的权值必须大于题目所给的原最小生成树权值根据这样的思想,我们能构造出这样一个边权原创 2022-02-13 09:29:02 · 423 阅读 · 0 评论 -
ybtoj 躲避拥挤 并查集
题目样例数据范围解题乍一看是图,但是并查集。其实画个图就知道了用微软白板画的,鼠标作画。可以看到3和5之间是5705的人气值,当询问6000时,就会有(5,3)和(3,5)这两个组合满足题目条件,像这种求连通的题呢,就可以用并查集了,不难发现,3和5一开始属于两个并查集,但满足条件之后贡献出了两个答案,那么3和5这个并查集与2这个并查集合并之后的贡献是多少呢?是2乘1再考虑反方向走再乘2对吧,所以现在就有了6个答案(2+4)。但是这题如果每次询问都去重做一遍,可能会爆掉,所以考虑离原创 2022-02-12 15:53:31 · 477 阅读 · 0 评论 -
ybtoj 子串拆分 KMP算法
太久没打KMP了,都快忘光了,还特意去复习了一下。题目要求一个ABA形式的子串,KMP的PMT恰巧可以求出一个字符串真前缀与真后缀的集合之交集中,最长元素的长度,那接下来就是枚举一下子串了#include <bits/stdc++.h>using namespace std;int main() { string n; cin>>n; n=' '+n; int m=n.size(); int t,len;cin>>t; int next[16000.原创 2022-02-12 14:15:13 · 400 阅读 · 0 评论 -
ybtoj 特殊数列 哈希 hash
第一问比较简单,第二问比较难#include<bits/stdc++.h>using namespace std;const int P=313;const int MOD=1000007;int a[1086],b[100086];int Hash[2000086];bool vis[2000086];bool use[2000086];int viv[2000086];int H(string s){ int cnt=0; for (int i=0;i<s..原创 2022-02-11 14:11:06 · 331 阅读 · 0 评论 -
ybtoj 攻击法坛 二分
一开始以为是贪心加二分,结果不是,是二分加DP,具体思路是二分L,然后开两个数组f1f2,用n方的时间算出在当前L下从第i个点开始能到达第f1[i]个点,f2同理,然后dp呢就开个二维数组, dp【i】【j】表示当前使用了i次法杖和j次二倍法杖#include<bits/stdc++.h>using namespace std;int a[2086];int f1[2086],f2[2086],dp[2086][2086];int main(){ int n,R,G; cin&.原创 2022-02-10 09:55:30 · 299 阅读 · 0 评论 -
ybtoj 最小时间【二分】
很明显能想到二分t,然后问题的关键在于,二分了t之后怎么算出在当前t下的最大值,如果直接用sort肯定会爆,这里可以用另一个函数:nth_element,这个函数的用法跟sort差不多,但是多了一个参数,它的作用是在指定的1-n区间内把m位排好序,然后m左边的都比m小(假设是从小到大排序),右边都比m大,但是并不是有序的,也就是如果m是第三位,那第二位可能比第一位小,但是它们都比m位小,所以放在了前面,这个函数的时间复杂度是O(n),这样就能用二分过#include<bits/stdc++.h&..原创 2022-02-10 08:41:13 · 162 阅读 · 0 评论 -
出栈序列 贪心
#include<bits/stdc++.h>using namespace std;int a[1000086],q[1000086],b[1000086];int main(){ int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } int maxn=INT_MIN; for(int i=n;i>0;i--) { maxn=max(maxn, a[i]); b[i]=m.原创 2022-02-09 16:00:46 · 403 阅读 · 0 评论 -
拓展欧几里得和逆元
今天没办法水了,因为今天爆零了,所以我要考虑一下写点什么,最近两天都在讲关于编程中的数学,虽然符号一多我基本上就看不懂了,而且他讲的也比较快,我一个蒟蒻还没看懂他写了什么就讲下一个了,可以说是非常懵逼,然后下午的题目又不会,可以说是非常绝望,到了晚上还得写凑字数的博客,可以说是非常劳累。我只能贴点代码,然后说说它们的作用了拓展欧几里得作用求出ax+by=gcd(a,b)/分隔/(a和b是给定的)中x和y的一组解inline int exgcd(int a,int b,int &x,int原创 2021-10-03 19:36:15 · 67 阅读 · 0 评论 -
中转站,凑字
朴实无华的一天,国庆放假四天,我倒贴国庆两天来集训今晚上又是主动想写博客的一天(但是实在想不出写点什么,本人没有什么才华,也没有高超的技巧,就是个普普通通的信竞选手最近上了高中,之前初中难理解的东西,现在也差不多能理解了,今天,没什么好说的,只解决了一题最短路的问题题目是这样的:中转站题目描述Kiana最近兼职起了快递工作,每天早上她都会从家里出发,先到中转站去接今天要送的快递清单,再将快递送到相应的地址去。可乐城一共有n个地点,m条双向道路将这些地点连通,使得任意两个地点之间都能够通过道路原创 2021-10-02 20:00:29 · 174 阅读 · 0 评论 -
优化程序的一些小技巧
本文会介绍一些我所知道的小技巧,但是受限于noip,比赛不能用的技巧我都不会提及首先要介绍的就是快读和快写,众所周知,cin和cout是比scanf和printf慢的,但是如果还要进一步提升速度,就必须使用快读和快写,快读和快写的原理就是,在处理字符的时候,比处理数字更快,当然还有一种更快的,fread,但是写法很复杂,用途也没那么广,所以快读和快写是比较广泛的选择 int read() //快速读入{ int s = 0, f = 1; char ch = getchar(原创 2021-08-12 20:21:00 · 92 阅读 · 1 评论