![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
codeforces
文章平均质量分 73
YMLFLONG
喜欢算法的蒟蒻
展开
-
codeforces 700C
题目:图上删除最多两条边使得两个点不连通,要求删除的边权和最小。解法:枚举一条可达路径上的边,tarjan找割边。复杂度O(n*m)。#includeusing namespace std;typedef long long LL;struct Edge{ int st,ed,id,w,next; bool edge_cut,deleted; Edge(){} Edge(in原创 2016-07-25 10:13:07 · 468 阅读 · 0 评论 -
codeforces 677E
题意:给出一个1000*1000的举证,问你任意“十字乘积”的最大值。十字可以是#includeusing namespace std;#define N 2010int d[N][N];double s[8][N][N];int p[8][N][N];typedef long long LL;#define MOD 1000000007//0,1 ,1,1, 1,0, 1原创 2016-08-14 15:00:48 · 308 阅读 · 0 评论 -
codeforces 703D
题意:求区间出现偶数次的数的异或值。序列长度是1000000,操作是1000000.题解:求出区间不同的数的异或值,然后区间异或值^不同的数的异或值 = 出现偶数次的数的异或值。不同数的异或值用离线的方式处理,用树状数组维护。#includeusing namespace std;class FenWick{private: int n; vector d;public原创 2016-08-13 18:29:12 · 331 阅读 · 0 评论 -
codeforces 703C
题意:有一辆汽车从马路上穿过(不会让人的,可以看成凸多边形),一个人从马路这头最快要多久可以走到对面。速度不能超过一定值,不能被撞。题解:贪心。过马路无非两种情况,(1)在凸多边形的每个点到达马路上之前通过这个点(全部可以的话就急速通过)。每个点走过之后再急速穿过。#includeusing namespace std;typedef pair pdd;#define原创 2016-08-13 16:24:26 · 274 阅读 · 0 评论 -
codeforces 706E
题意:给你一个(1000*1000)的矩阵,有10000次操作,每次交换两个同样大小的小矩阵,任何一个小方块不会属于两个矩阵,任一两个相邻的小方块不会属于一个矩阵。输出最后的矩阵。题解:十字链表,暴力。(其实只要两个指针)#includeusing namespace std;#define N 1010struct Node{ int right,down; int v原创 2016-08-12 11:39:12 · 726 阅读 · 0 评论 -
codeforces 688D
题意:已知n个数的模后的结果,求另外一个数模的结果。题解:中国剩余定理的入门题。#include using namespace std;typedef long long LL;int main(){ int n,m; while(scanf(" %d %d",&n,&m)==2){ LL ret=1; for(int i=0;i<n;i++){ int原创 2016-07-25 12:21:05 · 270 阅读 · 0 评论 -
codeforces 689D
题意:给出两个序列,计算有多少个区间,第一个序列的最大值等于第二个序列的最小值。题解:注意到第一个区间的最大值递增,第二个区间的最小值递减。我们可以枚举起点,二分相等位置。#includeusing namespace std;class RMQ{ int n; vector Log2; vector > f; vector a;public: RMQ(int原创 2016-07-25 10:59:13 · 433 阅读 · 0 评论 -
codeforces 689E
题意:n个区间,找出任意k各区间重叠区间长度的和。题解:从重叠部分考虑,原问题变成每个数字被多少组k区间包含。然后就是扫描区间,组合数计算。#includetypedef long long LL;using namespace std;typedef pair pii;#define MOD 1000000007LL powMod(LL x,LL p,LL mod){原创 2016-07-25 10:53:39 · 345 阅读 · 0 评论 -
codeforces 700B
#includetypedef long long LL;using namespace std;class Solution{ vector > tr; vector vi,cnt; int n,m; LL ret;public: void init(){ cin>>n>>m; tr = vector >(n+1); vi = cnt = vector (n+1,0原创 2016-07-25 10:43:59 · 502 阅读 · 0 评论 -
codeforces 703E
题意:给出1000个数,和一个整数10^12。求个数最少,和最小的子集,使得他们的乘积是时k的倍数。题解:注意到k的约束的个数不是很大,然后dp[i][d]=dp[i][d/gcd(a[i],d])+1;注意到只有k的约束的才有意义,然后就是离散化,然后dp,细节比较多,请查看代码。#includeusing namespace std;typedef long long LL原创 2016-08-13 21:03:59 · 552 阅读 · 0 评论