CF杂题
GA_PK
一个博客写的很烂的普通人
展开
-
E. Weights Distributing(思维,单源最短路交集)
传送门 做法应该不难想到:对a求一遍最短路,对b求一遍最短路,然后看a->b和b->c的交了多少条边,贪心的把交边赋值成为小权值即可。 难点在于这个交集如何去求解,不妨换一种思路,去枚举这个交点x,那么路径的走向就是a->x->b->x->c.可以观察到b->x的路径走了两遍,所以只需要把b->x路径上的边赋最小的若干个权值即可。 具体做法就是先对p数组排序求一遍前缀和,然后a,b,c各bfs求一遍最短路。枚举x每次统计p[dis[x][1]] + p[dis原创 2020-12-25 22:19:05 · 154 阅读 · 0 评论 -
Codeforces Round #547 (Div. 3) 题解
A. Game 23 乘2和乘3的次数显然不会太多,暴力dfs即可。 代码: #include <bits/stdc++.h> #define fir(i,a,b) for(int i = a;i <= b; ++ i) using namespace std; int n,m,ans; void dfs(int now,int cnt){ if(now > m) return; if(now == m){ ans = min(ans,cnt); return; }原创 2020-12-25 16:59:52 · 163 阅读 · 0 评论 -
Codeforces Round #690 (Div. 3) 题解
A. Favorite Sequence 模拟题 代码 #define LL long long #define pq priority_queue #define ULL unsigned long long #define pb push_back #define mem(a,x) memset(a,x,sizeof a) #define pii pair<int,int> #define fir(i,a,b) for(int i=a;i<=(int)b;++i) #define af原创 2020-12-18 22:14:50 · 250 阅读 · 1 评论 -
F. Array Partition (思维+单调栈)
传送门 题目大意:给一个数组,问能否把数组分为三段区间满足: max(1,x)=min(x+1,x+y)=max(x+y+1,n). 某场Div3的最后一题.思维和编程难度都不算小. 考虑枚举一下这个数是多少,那么这个数起码在数组里要出现三次以上.只有这种数才有机会成为答案. max和min有一个很明显的性质:当值域集合大小增大时,max会更大,min会更小. 那么对于每一个数来说,两个max区间只要取最左边和最右边的两个数即可,中间的数可以暴力枚举.只要这中间的数产生的区间和其他两个区间有交集即可成为答案原创 2020-12-04 15:15:34 · 306 阅读 · 0 评论