https://codeforces.com/contest/1133/problem/E 题意 给你n个数(n<=5000),你需要对其挑选并进行分组,总组数不能超过k(k<=5000),每组数字差距不超过5,问最多能挑出多少数字 题解 先排序,在进行dp,定义dp[i][j]为前i个数分成j组的最大值 两个转移方向 不选 dp[i-1][j] -> dp[i][j] 和前面的分组 dp[lt[i]-1][j-1] -> dp[i][j] 怎么确定i前面的哪个点是最大的? 选择能…
Codeforces Round #544 (Div. 3) D. Zero Quantity Maximization 题目链接:https://codeforces.com/contest/1133/problem/D 题意: 给出ai,bi,然后让你确定一个数d,令ci=d*ai+bi,问怎么确定这个d,有最多的ci为0. 题解: 这个题其实不难,但是我没做起,哎,初中数学没学好啊..其实做法就是map+pair就行了. 但是这里要注意一个问题,就是当ai=bi=0的时候,d是可以任意取值…
题意:有\(n\)个人,每个人的能力值是\(a_i\),现在你想将这些人分成\(k\)组(没必要全选),但是每组中最高水平和最低水平的人的能力差值必须\(\le 5\),问最多能选多少人. 题解:想了一会发现纯贪心写不了,必须要用dp来求解,先排序,我们记\(dp[i,j]\),表示前\(i\)个人分成\(j\)组选的最多的人数,当便遍历到某个人的时候,他可以不加任何组\(dp[i][j]=dp[i-1][j]\),否则如果他要加入,那么我们往前找到第一个与其能力差值\(>5\)的位置\(pos…
https://codeforces.com/contest/1121/problem/D 题意 给你一个m(<=5e5)个数的序列,选择删除某些数,使得剩下的数按每组k个数以此分成n组(n*k<=m),存在只要一组满足和目标集合s(|s|<=k)匹配(即集合中存在的数,组内一定存在) 题解 重点:找出至少一组满足要求的数 假设[l,r]内满足要求,还需要满足:\((l-1)/k*k+(m-r)/k*k>=k*(n-1)\),可以用双指针,对于每个l可以处理出最小的r满足要求 这样…
A. Middle of the Contest 代码: #include <bits/stdc++.h> using namespace std; int h1, m1, h2, m2; , tim2 = ; int main() { scanf("%d:%d", &h1, &m1); scanf("%d:%d", &h2, &m2); tim1 = h1 * + m1; tim2 = h2 * + m2; tim2 -…
A.Middle of the Contest 考虑把输入的时间单位化成分钟,相加除以2就好了 #include<bits/stdc++.h> using namespace std; #define re register #define sys system("pause"); inline int read(){ re ,f=;char c=getchar(); ;c=getchar();} )+(x<<)+(c^),c=getchar(); return…
链接:https://codeforces.com/contest/1133/problem/D 题意: 给两个数组a,b. 同时ci = ai * d + bi. 找到一个d使c数组中的0最多. 求出最多几个0. 思路: map记录b/a对应的个数. 同时a和b等于0时.满足任意d使c等于0. 直接额外加上. 代码: #include <bits/stdc++.h> using namespace std; typedef long long LL; const int MAXN = 2e5…
链接:https://codeforces.com/contest/1133/problem/C 题意: 给n个数, 在这n个数中选最多n个数,来组成一个队伍. 保证这n个数的最大最小差值不大于5. 求最多能选几个数. 思路: 排序,二分,对每个数从后往前找比他差5的第一个数. 代码: #include <bits/stdc++.h> using namespace std; typedef long long LL; const int MAXN = 2e5 + 10; int a[MAXN…
链接:https://codeforces.com/contest/1133/problem/B 题意: 给n个数,和一个k,在n个数中选几对数,保证没对数相加可以整除k. 求最大能选几个数. 思路: 记录每个数mod k的值. 通过mod k的值为多少的数的数量,计算对数. 例 k = 3时.mod k为1 和 mod k 为2 的数可以组成一对满足的数. 代码: #include <bits/stdc++.h> using namespace std; typedef long long…
链接:https://codeforces.com/contest/1133/problem/A 题意: 给两个时间点,求中间时间点. 思路: 数学 代码: #include <bits/stdc++.h> using namespace std; typedef long long LL; int main() { int h1, h2, m1, m2; scanf("%d:%d", &h1, &m1); scanf("%d:%d",…