摘要:
A题: B题: 刚开始看了眼T1觉得简单,就敲了一个暴力(get65)过了所有样例后就直奔T2,T2是拓扑排序的板子,但由于数据就只写了n^2算法(get100) 又过了所有样例,信心暴涨(当时想着能AK)但T1由于没写筛法,卒。giao~ t1其实很简单就是一个筛法模板(但我居然没看出来!)埃氏筛 阅读全文
摘要:
来写周练了~ 这道题目卡了很久。 首先看到最大值最小化就应该联想到二分,那么二分什么呢? 二分答案~ 这里l,r的取值范围需要注意,l=0没有争议,r必须取值到n2,又因为数据大所以要开 long long .十年it一场空,不开long long见祖宗 接下来看check函数,这里找到一个数加一次 阅读全文
摘要:
不难发现每个数都不⼤实际没到1e9,这启发我们直接计算对于所有数字,以该数为因数的数字有 多少个即可。按照素数筛法的原理可知,这么做复杂度只有log n #include<bits/stdc++.h>//因式分解 using namespace std; const int N=1e6+1; int 阅读全文
摘要:
优先队列有两个分支,一个是小根堆,一个是大根堆。 这是一个优先队列的定义: priority_queue<int> q; 默认是大根堆。 大根堆,也就是堆顶是最大的数,按着降序排到堆底。 小根堆,也就是堆顶是最小的数,按着升序排到堆底。 大根堆定义: priority_queue<int> q; 由 阅读全文
摘要:
题目: 这道题目十分简单,只要用大根堆维护前k小的数字即可,用大根堆是因为方便输出(用小根堆需要输出堆底),前k个先单独输入,不输出(第k个除外,单独输出) ,之后k+1~n如果输入进来的数字比堆顶大,直接跳过,否则先把原堆顶弹出再推入输入进来的数字,每一次输出堆顶即可。 大根堆与小根堆及优先队列 阅读全文
摘要:
题目: 题意简洁明了,一边输入一遍判断,如果是第一个就开始第一次的订阅,如果不是,就比较是继续订阅好还是重新订阅好,十分暴力。 程序: #include<bits/stdc++.h> using namespace std; const int N=1e5+10; long long n,k,ans 阅读全文
摘要:
题目: 这题直接暴力旋转印章再暴力比较是否有多余的黑色,如果没有,进行涂色即可,不需要任何优化。 注意:画布不可以旋转。 肝程序.jpg 程序一会发 注:虽然我喜欢用string但用string一直莫名其妙的错,懒得改了,就换成了char 程序: #include<bits/stdc++.h> us 阅读全文
摘要:
题目: 来写周练了,这道题目开开胃,就只用遍历一遍b数组、d数组再加上一些特判即可 程序: #include<bits/stdc++.h> using namespace std; const int N=1e5+10; long long n,t,d[N],b[N]; int main() { i 阅读全文
摘要:
先假设a+t=b+l 那么是不是可以推出 abs(a-b)+t=b+l 设a-b 为x 所以我们现在只需要考虑 (a-b, 0) 的问题怎么解决。与其思考怎么把 1, 2, · · · , k 这 k 个数字分配到两边,不如考虑先把 k 个数字全部加到 0 那儿去再取一些回 来。 把k个数全都加到0 阅读全文
摘要:
题目: 这道题目比较简单,由于数据量比较小我们用邻接矩阵来存图,方便查找两点间是否有连接 i,j,k三重循环暴力枚举,因为会有重复情况所以我们要保证i<j<k 故代码为: #include<bits/stdc++.h> #define io ios::sync_with_stdio(false),c 阅读全文