Acwing 周赛88 题解】的更多相关文章

AcWing周赛43 题源:https://www.acwing.com/activity/content/1233/ 4314. 三元组 直接暴力做就是了,我一开始还在找规律..悲 我滴代码 #include <iostream> #include <algorithm> using namespace std; int n, cnt; int main (){ cin >> n; for (int i = 1; i <= n; i ++) for (int j…
本周的周赛题目质量不是很高,因此只给出最后两题题解(懒). 1552 两球之间的磁力 #二分答案 题目链接 题意 有n个空篮子,第i个篮子位置为position[i],现希望将m个球放到这些空篮子,使得任意两球间最小磁力最大.(其中,磁力简化为两点位置之差) 分析 该题是二分答案的裸题,详细见代码 class Solution { public: bool Judge(vector<int>& a, int x, int m){ int cnt = 1,lastpos = a[0];…
周赛44 4317. 不同正整数的个数 link:https://www.acwing.com/problem/content/4320/ 我直接set #include <iostream> #include <set> using namespace std; int n; int a[105]; set<int> p; int main (){ cin >> n; for (int i = 1; i <= n; i ++){ cin >&g…
https://leetcode.com/problems/merge-sorted-array/ 题目: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additi…
A.分组 首先,认识的人不超过3个,因此不存在无解的方案 考虑直接构造,先把所有点设为1,顺序扫一遍把有问题的点加入队列 每次取队头,将其颜色取反,再更新有问题的点 复杂度:考虑到每个点不会操作2次,所以是\(O(N+M)\) 到目前为止.AC的代码几乎都是因为数据水才AC的错误代码 #include<bits/stdc++.h> #define REP(i,a,b) for(int i=(a);i<=(b);++i) #define DEC(i,a,b) for(int i=(a);i…
A.排队问题*-* 题意就是有长度为L的序列,每位的取值可以是'f'或者'm',问不包含'fff'和'fmf'的个数. 打表找规律 不难找出递推公式为F[n] = F[n-1] + F[n-3] + F[n-4]. 然后直接遍历就可以了...突然发现L范围很小,我写了个矩阵快速幂... 多组数据且模数不固定,矩阵快速幂即可 #include <bits/stdc++.h> using namespace std; typedef long long ll; int n,mod; struct…
Analysis 总体来说是一个区间DP 此题首先是一个环,要你进行删边操作,剩下的在经过运算得到一个最大值 注意事项: 1.删去一条边,剩下的构成一条线,相当于求此的最大值,经典区间DP该有的样子: 2.现在大概想法有了,还有一个细节,就是当中会出现负数,负数*负数是可能超过当前的最大值的,所以我们不仅需要维护区间最大值,还有最小值,因为两个极小值相乘是可以超过最大值的. #include<iostream> #include<cstdio> #include<cstrin…
Analysis 一棵树的每颗子树都对应着这棵树 DFS 序的一个区间.本题的序列虽然不是 DFS 序列,但也有该性质.本题中,我们以区间长度作为阶段, F[ l , r ] 表示序列 s[ l ~ r ]中子树的个数. 如果我们从 l  到  r  在每一个点划分一个 k ,那么时间复杂度会很高.一个比较好的想法是,把子串s[ l ~ r ]分成两部分,每部分可由若干子树构成.为了计数重而不漏,我们只考虑子串的第一颗子树是由哪些序列构成的,即令子串s[ l+1 ~ k-1 ] 构成第一棵子树,…
每日一题 day20 打卡 Analysis 线型动态规划 读入每个人的贪婪度之后,对其按照从大到小的顺序排序,定义状态f[i][j]为前i个人(排序后)分j个饼干的答案,那么答案为f[n][m],考虑状态转移方程. 1.若给第i个人的饼干数大于1 ,那么我们将这i个人的饼干数都减1(总共减n),他们的怨气值是不会改变的,因而这种情况下,f[i][j]=f[i][j-i]. 2.若给第i个人的饼干数等于1,那么我们枚举一个k(0≤k<i),表示从k之后一直到i所有的人的饼干数都是1,那么f[i]…
Analysis 这道题因为我们要给能到达的两个点都连上,又由于n<=200,所以我们可以用n³的传递闭包来建边,再用匈牙利算法来求二分图最大点独立集. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 210 #define maxm 30010 using namespace std; inline int read() {…