题目链接:1037F - Maximum Reduction 题目大意:给出一段代码,给你一个长度为n的数组和数字k,求程序运行结果,mod 1e9+7输出 简单翻译下代码的意思,初始定义一个空数组b,分别查询区间[1,k];[2,k+1];...;[n-k+1,n]的最大值,并将这 n-k+1 个区间最大值放入b,将b中元素之和加入到ans里,并把这个长度为n-k+1的数组b放入到下一层的递归,这样就要再求n-2k+1次.n-3k+1次最大值,直到数组的长度小于k(即无法求区间长度为k的最大值…
题目链接:1037E - Trips 题目大意:有n个人,m天,每天晚上都会有一次聚会,一个人会参加一场聚会当且仅当聚会里有至少k个人是他的朋友.每天早上都会有一对人成为好朋友,问每天晚上最多能有多少人参加聚会.朋友关系不满足传递性. 相当于有n个点,进行m次加边操作,每次操作后附加一个询问,问最大点集的大小,使得点集中每个点的度数均大于等于k 题解:如果直接边加边询问可能比较麻烦,本着“正难则反”的原则,我们可以将题目转化为,初始有m条边,每次操作是先询问当前的答案,再删去一条边. 现在我们就…
总感觉我这种做法会T,一直没写,看了其他人的题解也是这样,,,就果断写了,,可能数据不太深,或者玄学复杂度 题意即求xk-1长度的所有区间的最大值的和,对每一个i(数组下边),他对答案的贡献数量就是在以ar[i]为最大值的最大子区间中所有符合条件的区间数量 求ar[i]的作用区间,即,求最小的l,对于x>=l&&x<i,ar[x]<=ar[i]:求最大的r,对于k<=r&&k>i,ar[k]<ar[i]:则ar[i]的作用区间为[l,r]…
D. Valid BFS? time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output The BFS algorithm is defined as follows. Consider an undirected graph with vertices numbered from 11 to nn. Initialize qq as a…
比赛的时候想到怎么做了 没调出来(感觉自己是个睿智) 给你N个点M条边,这M条边是一条一条加进去的 要求你求出加入每一条边时图中极大'K度'子图的大小 极大'K度'子图的意思是 要求出一个有尽量多的点的子图 该图中每个点的度数至少为K 因为他每加一条边只会影响到两个点的度数 所以很明显下一个极大'K度'子图是在上一个的基础上得来的 所以如果我们知道在最早哪一步加入边时 产生了极大'K度'子图的话 我们就可以对每条边进行判定得出答案 但是如果每一步都判是否有极大'K度'子图 肯定会超时 该题是离线…
目录 Codeforces 1037 A.Packets B.Reach Median C.Equalize D.Valid BFS E.Trips(正难则反) Codeforces 1037 比赛链接 F之后的先不做了... A.Packets logn+1,没细想,反正对. #include <cstdio> #include <cctype> #include <algorithm> #define gc() getchar() inline int read()…
https://codeforces.com/contest/1037/problem/F 题意 function z(array a, integer k): if length(a) < k: return 0 else: b = empty array ans = 0 for i = 0 .. (length(a) - k): temp = a[i] for j = i .. (i + k - 1): temp = max(temp, a[j]) append temp to the en…
https://codeforces.com/contest/1037/problem/E 题意 有n个人,m天,在第i天早上,x和y会成为朋友,每天晚上大家都要上车,假如一个人要上车那么他得有至少k个朋友上车,输出每天晚上上车人数 题解 一个点的度数<k,他就上不了车 假如一个人上不了车,那么他对他的朋友就没有了价值,就等于把边去掉 离线处理,反着消边 因为每条边只能走一次,所以标记边bfs 代码 #include<bits/stdc++.h> #define MAXN 200005…
C - Equalize #include<bits/stdc++.h> using namespace std; using namespace std; string a,b; int main(){ int n; cin>>n; cin>>a>>b; ,sum=; ;j<n;j++){ if(a[j]!=b[j]) ans++; } ;j<n-;j++){ if(a[j]==b[j]) continue; ]==]=='){ sum++;…
还是dfs? 好像自己写的有锅 过不去 看了题解修改了才过qwq #include <cstdio> #include <algorithm> #include <cstring> #include <stack> #include <set> using namespace std; ],v[],n,m,k,ans; ],vis[]; ]; stack<int> S; void dfs(int u){ if(sons[u].size…