
比赛题解
各种比赛题解收录
酷酷的Herio
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode第239场周赛(康复训练)
LeetCode第239场周赛(康复训练)A.简单模拟。B. 2192^{19}219爆搜,注意开ullullull。C. 先用next_permutationnext\_permutationnext_permutation找到第kkk个排列,然后求出逆序对即可。D. 并查集好题,先对区间按长度从小到大排序,然后用并查集维护,每个位置对应的答案。codeclass Solution {public: vector<int>s; vector<int>原创 2021-05-03 13:04:04 · 310 阅读 · 0 评论 -
LC234
LC2341805. 字符串中不同整数的数目双指针模拟即可1806. 还原排列的最少操作步数暴力模拟或者只模拟一个数 或者利用置换的方法去做1807. 替换字符串中的括号内容双指针模拟1808. 好因子的最大数目数学题,优先分成333,其次分成222。...原创 2021-03-30 11:27:36 · 280 阅读 · 0 评论 -
ABC-195-E,F(题解)
E - Lucky 7 Battle 经典倒序dpdpdp,类似求期望,玩游戏的dp题,一般为倒序,因为本题只要求是否为777的倍数,所以我们可以开个二维维护每一轮的模777的情况,即dp[i][j]dp[i][j]dp[i][j]为从第iii轮结束后最终的情况。初始化为dp[n][0]=1dp[n][0]=1dp[n][0]=1,因为第nnn轮结束后余数为000必胜。然后根据提意转移,分两种情况。bool x=dp[i][(j*10+a[i]-'0')%7],y=dp[i][j*10%7];原创 2021-03-14 16:58:31 · 622 阅读 · 0 评论 -
AtCoder Beginner Contest 174 题解
AtCoder Beginner Contest 174 题解C Repsept 知识点:取模对加法和乘法封闭,所以暴力到2×1062\times 10^62×106,一边取模一边特判即可。D - Alter Altar 最终肯定是RRR全在左边,简单证明:假设最终RRR左边的某个位置存在WWW,则该位置右边只能是WWW,然后就是子问题了,一直递归下去,一定存在某个WWW右边是RRR不满足。所以可以用操作一然后不断把左边WWW交换成RRR。E - Logs经典二分问题。F -原创 2021-03-11 20:41:13 · 332 阅读 · 0 评论 -
Codeforces Round #697 (Div. 3) (D-G)
Codeforces Round #697 (Div. 3) (D-G)D. Cleaning the Phone跟上次洛谷div2的T3有点像,考虑分组,然后贪心,枚举第一组的个数,二分第二组的个数即可。时间复杂度:O(nlogn)O(nlogn)O(nlogn)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=2e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1原创 2021-01-26 10:54:55 · 365 阅读 · 0 评论 -
LeetCode 第 224 场周赛
LeetCode 第 224 场周赛刷题5653. 可以形成最大正方形的矩形数目比较水,简单模拟,不讲了。5243. 同积元组哈希记录乘积结果,每个乘积的贡献是:4×cnt×(cnt−1)4\times cnt\times (cnt-1)4×cnt×(cnt−1)怎么来的,从cntcntcnt中选222对:cnt(cnt−1)2\dfrac{cnt(cnt-1)}{2}2cnt(cnt−1)两队共有8=A2222=88=A_2^2 2^2=88=A2222=8种情况5655. 重新排原创 2021-01-17 15:24:13 · 313 阅读 · 0 评论 -
Educational Codeforces Round 102 (Rated for Div. 2)
Educational Codeforces Round 102 (Rated for Div. 2)没打,住院了,来补题玩了,EF还没看,估计要鸽。A. Replacing Elements水题,维护最小和此小特判即可,或者直接排序找。B - String LCM比较裸,先求出最小公倍数长度,然后特判下。C. No More Inversions观察下样例就能发现,可以构造一个逆序对和为1+2+⋯+(n−k)1+2+\dots+(n-k)1+2+⋯+(n−k)的序列bbb,因此我们只需先构原创 2021-01-15 16:10:11 · 323 阅读 · 0 评论 -
LeetCode第 221 场周赛
LeetCode第 221 场周赛1705. 吃苹果的最大数目class Solution {public: #define PII pair<int,int> int eatenApples(vector<int>& a, vector<int>& d) { priority_queue<PII,vector<PII>,greater<PII> >q; int n=原创 2021-01-09 17:46:08 · 234 阅读 · 0 评论 -
Codeforces Round #695 (Div. 2)
Codeforces Round #695 (Div. 2)菜死了A. Wizard of Orz贪心,肯定最高位越高越好,所以显然最高位为9,然后需要考虑从那个位开始时最优的,接着考虑次高位,根据贪心原则,次高位最优是8,即从此高位开始停止,其他情况都不是最优。B. Hills And Valleys枚举每个位置修改为前一个和后一个数的最大贡献。C. Three Bags贪心,最后只剩两类情况:1.两个集合求和减去另一个集合。2.三个集合之和减去(两个集合的最小值的两倍)。D. Sum原创 2021-01-09 15:56:47 · 510 阅读 · 2 评论 -
LeetCode第222场周赛
LeetCode第222场周赛RecordRecordRecord1710. 卡车上的最大单元数思路:贪心从大到小选。1711. 大餐计数思路:哈希统计即可。1712. 将数组分成三个子数组的方案数思路:前缀和+二分,或者三指针。1713. 得到子序列的最少操作次数思路:转化一下就是求LCSLCSLCS,因为是不同的数,所以可以映射转化求LISLISLIS,复杂度降到O(nlogn)O(nlogn)O(nlogn)...原创 2021-01-06 22:16:30 · 229 阅读 · 0 评论 -
Codeforces Round #693 (Div. 3)
Codeforces Round #693 (Div. 3)A.Cards for Friends计算面积包含的2i≥n2^i\ge n2i≥n。B.Fair Division暴力。C. Long Jumps从左往右,用标记维护取最值。D. Even-Odd Game分奇偶两堆,从大到小排序,对于当前局势,如果自己得分更大就选自己的,否则如果对方牌顶更大就选对方,让对方不得分。E. Correct Placement前nnn个以hhh为第一关键字,后nnn个以www为第一关键字,然后排原创 2021-01-05 10:05:14 · 439 阅读 · 0 评论 -
牛客2020跨年场
牛客2020跨年场前言CF的跨年场我也打了。Good Bye 2020题解在我的个人blogblogblog。传送门牛客跨年场打了一会儿,就和室友一起吃kfckfckfc看晚会,后来切了个A题,哈哈。题解A.关于元旦的冷/热知识有趣的历史题,wawawa了好多发才过,事实证明百度不可靠。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e3+5,M=2e4+5,i原创 2021-01-01 11:21:49 · 3858 阅读 · 6 评论 -
牛客编程巅峰赛S210th 题解
牛客编程巅峰赛S210th 题解A.奇怪的排序问题题意:给定nnn个不同的数[1,n][1,n][1,n],若ai>ai+1a_i>a_{i+1}ai>ai+1则一直交换,直到i=n∣∣ai<ai+1i=n||a_i<a_{i+1}i=n∣∣ai<ai+1,这样算作一次交换,求最小交换次数得到升序。思路:从后往前维护一个单调队列,或者直接取最值,判断当前aia_iai是否存在aj<ai(j>i)a_j<a_i (j>i)aj<原创 2020-12-25 11:04:15 · 299 阅读 · 0 评论 -
2017CCPC final 习题
2017CCPC final 习题Dogs and Cages简单数学期望,代码不贴了。Evil Forest为啥有这么水的题,向上取整统计完事,代码不贴了,后面贴一些有质量的题。待更……\dots\dots……原创 2020-10-30 23:28:42 · 436 阅读 · 0 评论 -
2017 CCPC 杭州习题
2017 CCPC2017\ CCPC2017 CCPC 杭州习题A. Super-palindrome思路:显然奇,偶位置字母相同,然后贪心选即可。C. Hakase and Nano思路:找规律的博弈题,本题是NimNimNim博弈的改编版本,但是跟NimNimNim博弈的异或和没有半毛钱关系,因为HakaseHakaseHakase一回合可以进行两次操作,所以粗略看HakaseHakaseHakase赢的机会更大,因为他有两次操作可以改变场上局势。接下来我们找规律:1.原创 2020-10-29 14:21:15 · 409 阅读 · 0 评论 -
牛客练习赛68(ABC)简要题解
牛客练习赛68(ABC)简要题解A.牛牛的mex思路:因为题目限制nnn个不相同属于[0,n)[0,n)[0,n)的数,所以可以求前后缀的最小值,也即min(pre[l−1],suf[r+1])min(pre[l-1],suf[r+1])min(pre[l−1],suf[r+1])为答案,注意pre[0]=suf[n+1]=npre[0]=suf[n+1]=npre[0]=suf[n+1]=nB.牛牛的算术思路:这种多维求和求积式一般是化简。∏i=1n∑j=1i∑k=1jijk\prod_{i=原创 2020-08-29 11:49:44 · 461 阅读 · 0 评论 -
牛客等级之题N1,N2(8.13)
斐波那契(矩阵快速幂)思路:根据公式:∑i=1nfi2=fifi+1\sum\limits_{i=1}^n f_i^2=f_if_{i+1}i=1∑nfi2=fifi+1和矩阵快速幂即可。时间复杂度:O(logn)O(logn)O(logn)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=3,mod=1e9+7;#define mst(a) memset(a,0,size原创 2020-08-13 16:32:39 · 430 阅读 · 0 评论 -
牛客算法周周练17题解(ABCDE)
A.生成树思路:贪心。~一开始用mapmapmap写了个假算法,发现数据太弱了。以第一棵树为基准,我们用setsetset记录每条边,规定edge(u,v),u<vedge(u,v),u<vedge(u,v),u<v,这样方便去重。然后我们只需在第二课树找到第一棵树中不存在的边即可,因为第二棵树少的边和多的边数肯定相等的,不然边数和不可能为n−1n-1n−1,所以根据贪心我们只需统计少的边即可,这样用setsetset就很方便了,此时setsetset的大小是:2(n−1)−x2(原创 2020-07-29 11:00:36 · 600 阅读 · 3 评论 -
E. Battle Lemmings (DP)
E. Battle Lemmings (DP)思路:dpdpdp。不会写,参考别人的代码,ans=n(n−1)2−cnt1(cnt1−1)2−cnt1(n−cnt1)−∑continuous_pair(0,0)ans=\dfrac{n(n-1)}{2}-\dfrac{cnt_1(cnt_1-1)}{2}-cnt_1(n-cnt_1)-\sum continuous\_pair(0,0)ans=2n(n−1)−2cnt1(cnt1−1)−cnt1(n−cnt1)−∑continuous_pa原创 2020-10-05 12:20:34 · 486 阅读 · 0 评论 -
D. Rescue Nibel!(排序&组合数学)
D. Rescue Nibel!(排序&组合数学)思路:排序+++组合数学利用差分思想,将区间按左端点排序,左端点值为1,右端点值为-1,这样 便于统计相交区间数量。然后对每个区间,求出在它之前与它相交的区间个数cntcntcnt。它的贡献即为:C(cnt,k−1)C(cnt,k-1)C(cnt,k−1)。当区间端点重合时,优先用值为1的,这样不会少统计。每遍历完一个区间后,cnt+=i.secondcnt+=i.secondcnt+=i.second,表示还剩多少个相交区间。#inc原创 2020-10-04 22:14:19 · 464 阅读 · 0 评论 -
C1. Pokémon Army (easy version)(DP)
C1. Pokémon Army (easy version)(DP)思路:dpdpdp。考虑:分数组长度的奇偶性进行dpdpdp。令dp[i][0]dp[i][0]dp[i][0]表示前iii个数答案为偶数长度的最大值,dp[i][1]dp[i][1]dp[i][1]表示前iii个数答案为奇数长度的最大值。显然有状态转移方程:dp[i][0]=max(dp[i−1][0],dp[i−1][1]−a[i])dp[i][0]=max(dp[i-1][0],dp[i-1][1]-a[i])dp[i][原创 2020-10-04 21:32:09 · 602 阅读 · 0 评论 -
B. Rock and Lever(位运算)
B. Rock and Lever(位运算)思路:位运算。考虑ai,aja_i,a_jai,aj的最高为1的位pi,pjp_i,p_jpi,pj。如果pi≠pjp_i\neq p_jpi=pj则ai&aj<ai⊕aja_i\&a_j<a_i\oplus a_jai&aj<ai⊕aj。因为右边的最高位变成为1,而左边是0。所以只有当pi=pjp_i=p_jpi=pj才有贡献,显然贡献是cnt(cnt−1)2\dfrac{cnt(c原创 2020-10-04 21:05:40 · 504 阅读 · 0 评论 -
A. Cubes Sorting(思维)
A. Cubes Sorting(思维)结论:任何长度为nnn的数组逆序对数最多为n(n−1)2\dfrac{n(n-1)}{2}2n(n−1)。因为:∑i=1n−1i=n(n−1)2\sum_{i=1}^{n-1} i=\dfrac{n(n-1)}{2}∑i=1n−1i=2n(n−1)冒泡排序的原理就是根据减少逆序对实现的。即相邻元素交换的次数等于逆序对数。当且仅当数组为递减序(nnn个元素都不相同) 逆序对数=n(n−1)2\dfrac{n(n-1)}{2}2n(n−1)成立。#in原创 2020-10-04 17:38:25 · 381 阅读 · 0 评论 -
F. Graph and Queries(反向并查集&dfs序&线段树)
F. Graph and Queries(反向并查集&dfs序&线段树)思路:反向并查集+dfs+dfs+dfs序+++线段树对询问进行离线操作,从后往前,最开始建立一张删除所有询问边后的图,然后倒着重构图,如果是操作一就更新查询结点为其祖先结点:Q[i].se=find(Q[i].se)Q[i].se=find(Q[i].se)Q[i].se=find(Q[i].se)如果是操作二就利用并查集建立新结点连边,具体就是新建立一个结点其儿子为这条边的两个结点,父亲也同时更新为该新结点。原创 2020-10-04 13:46:49 · 453 阅读 · 0 评论 -
Codeforces Round #664 (Div. 2)(ABCD)
A. Boboniu Likes to Color Balls思路:考虑答案的奇偶性,或者直接特判两次,因此操作xxx次=操作x+2x+2x+2次.B. Boboniu Plays Chess思路:直接模拟。C. Boboniu and Bit Operations思路:dpdpdp,令dp[i][j]dp[i][j]dp[i][j]数组aaa中前iii个数答案为jjj是否存在。然后遍历一遍即可。dp[0][0]=1; for(int i=1;i<=n;i++) for(int j=原创 2020-08-13 13:30:51 · 400 阅读 · 0 评论 -
Codeforces Round #663 (Div. 2) (CD)
C. Cyclic Permutations思路:全排列减去单峰排列即为答案。单峰排列即:峰左边下标的左边没有比它大的,峰右边的下标的右边没有比它大的。单峰排列个数:2n−12^{n-1}2n−1,除nnn外每个数可在左侧或右侧。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;#define mst(原创 2020-08-10 10:13:11 · 986 阅读 · 0 评论 -
Codeforces Round #494 (Div. 3)(A-F)题解
Codeforces Round #494 (Div. 3)(A-E)题解传送门A. Polycarp’s Pockets思路:输出众数个数即可。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=105+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;#define mst(a) memset(a,0,sizeof a)#define lx x<&l原创 2020-07-10 15:26:51 · 430 阅读 · 0 评论 -
Codeforces Round #490 (Div. 3)(A-E)题解
Codeforces Round #490 (Div. 3)(A-E)题解传送门A. Mishka and Contest思路:签到题,双指针模拟即可。时间复杂度:O(n)O(n)O(n)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=105+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;#define mst(a) memset(a,0,sizeo原创 2020-07-09 16:14:28 · 518 阅读 · 1 评论 -
Codeforces Round #486 (Div. 3)(A-F)题解
Codeforces Round #486 (Div. 3)(A-E)题解传送门A. Diverse Team思路:用一个vis[]vis[]vis[]数组维护出现过的数即可。时间复杂度:O(n)O(n)O(n)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;#define mst(a) memse原创 2020-07-08 16:02:18 · 440 阅读 · 0 评论 -
Codeforces Round #481 (Div. 3)(A-G)题解
Codeforces Round #481 (Div. 3)(A-G)题解传送门A. Remove Duplicates思路:先用一个vis[]vis[]vis[]记录那些数出现过,储存他们最后一次出现位置,然后排个序输出即可。时间复杂度:O(n)O(n)O(n)实际上不用排序,直接顺序遍历对应匹配输出即可。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=50+5,M=1e6原创 2020-07-07 16:17:02 · 477 阅读 · 0 评论 -
Codeforces Round #479 (Div. 3)(A-F)题解
Codeforces Round #479 (Div. 3)(A-F)题解传送门A. Wrong Subtraction思路:签到题,根据题意模拟即可。时间复杂度:O(k)O(k)O(k)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;#define mst(a) memset(a,0,sizeof原创 2020-07-06 16:04:20 · 476 阅读 · 0 评论 -
Educational Codeforces Round 89 (A-D)
Educational Codeforces Round 89 (A-D)比赛没打,来补题辣。A. Shovels and Swords思路:数学,高中线性规划搞一下,由于a,ba,ba,b对称性,可以默认a≤ba\leq ba≤b,然后分两种情况搞一下就行了。ans={a+b3,b≤2aa ,otherwiseans=\begin{cases}\dfrac{a+b}{3},b\leq2a\\a\ \ \原创 2020-06-12 13:56:25 · 473 阅读 · 0 评论 -
Codeforces Round #648 (Div. 2)(A-F)简要题解
Codeforces Round #648 (Div. 2)(A-F)简要题解A. Matrix Game奇偶性博弈,显然每次选一个格子,可用的行和列都会减1,所以只需看最初可用的行和列的最小值的奇偶性即可。B. Trouble Sort简单思维,观察一下可得只要一个序列有两种类型就可以得到任何排列,若只有一种类型判断一下序列是否非递减即可。C. Rotation Matching暴力,因为向左移动kkk次等于向右移动n−kn-kn−k次,且最多移动k−1k-1k−1次,所以我们只需要找到移动向原创 2020-06-08 15:58:30 · 459 阅读 · 0 评论