![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
codeforces
文章平均质量分 77
kuricip
如果你瞄准月亮,即便迷失,也是在星辰之间
展开
-
C. Knapsack(贪心)
题目传送门C. Knapsack题目大意给你n件物品和一个容量为w的背包,每件物品只能装入一次求将背包装到w/2−ww/2-ww/2−w的一种方案,输出物品数量和装入物品的序号思路1、考虑标记是否有存在w/2−ww/2-ww/2−w的物品,有就可直接输出2、考虑是否全部的值加起来都小于w/2w/2w/23、考虑是否全部的值都大于www前三种情况排除后,贪心:讲物品非递减排序,然后从最小的开始依次装入背包,当装入的东西大于w/2w/2w/2时即可输出响应的序列AC Code#pragma原创 2020-11-17 12:40:00 · 511 阅读 · 0 评论 -
B. Numbers Box(思维)
题目传送门B. Numbers Box题目大意给你一个n∗mn*mn∗m的矩阵,你可以选择两个相邻的单元,然后将两个值分别乘以-1求任意次操作后,整个矩阵的数值的最大和思路显然,两个负数无论相差多选都可以相互抵消显然,一个0可以抵消任意多个任意距离的负数所以统计矩阵中负数出现的个数和标记0是否出现即可奇数个负数时,使整个矩阵最小的数(无论正负)为唯一负数即可AC Code#pragma GCC optimize("-Ofast","-funroll-all-loops")#inclu原创 2020-11-17 00:36:09 · 754 阅读 · 0 评论 -
A. Add Candies(思维)
题目传送门A. Add Candies题目大意n个数分别为1、2、3....n1 、 2 、 3.... n1、2、3....n现在有一种操作,第j次操作能让除j以外的被操作数的其他所有数都加上j。如果要最后n个数相等,输出需要的操作次数和每次被操作的数的下标。思路第j次操作会使得被选中的数字少增加一个j最开始数组相邻差为1所以应该先从后往前选数即可,操作次数即为nAC Code#pragma GCC optimize("-Ofast","-funroll-all-loops")#i原创 2020-11-16 21:38:41 · 399 阅读 · 0 评论 -
C. The Delivery Dilemma(贪心&二分)
题目传送门C. The Delivery Dilemma题目大意共有n道菜,餐厅给你送过来的时间为aia_iai,你自己去餐厅拿的时间为bib_ibi,不同的餐厅可以同时送餐,但在一段时间内你只能去一家餐厅求n道菜全部到家的最小时间思路1考虑二分答案,首先假设自己去所有的餐厅取餐,然后二分答案,当前时间大于mid时,自己去取餐,小于mid的让餐厅送过来,算出自己去拿的时间然后与当前的时间mid作判断AC Code#pragma GCC optimize("-Ofast","-funrol原创 2020-11-04 23:06:47 · 429 阅读 · 0 评论 -
B. Saving the City
题目传送门B. Saving the City题目大意给你一个01字符串s,消除其中连续的1耗费a,将一个0变为1耗费b,求将整个字符串s全部变成0所消耗的最小值思路取将不相连的两段相连与否的最小值即可,即为第一个连续的1直接耗费a,后面记录到下一段的1的距离(即为中间0的个数),然后min(sum∗b,a)min(sum*b,a)min(sum∗b,a)即可AC Code#pragma GCC optimize("-Ofast","-funroll-all-loops")#include原创 2020-11-03 23:13:49 · 198 阅读 · 0 评论 -
A. Kids Seating
题目传送门A. Kids Seating题目大意给你一个n,从1~4n中选出n个数字使得数字两两gcd≠1并且不能互相整除思路考虑从4n往前取,每次减少2,即可使得两两之间的gcd=2同时,由4n取到2n,所以两两之间也不可整除AC Code#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<cstdio>#include<algorithm>#include<iostream>#原创 2020-11-03 22:53:52 · 185 阅读 · 0 评论 -
D. Minimal Height Tree
题目传送门D. Minimal Height Tree题目大意已知一个BFS的遍历顺序,每个结点的子节点是按照升序从左到右排列的求树的最少的层数思路将每个升序的子序列接到树的目前的根结点,并且该子序列的长度即为下次可以接的子树的个数AC Code#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<cstdio>#include<algorithm>#include<iostream>原创 2020-10-29 00:01:54 · 530 阅读 · 0 评论 -
C. Chef Monocarp(dp)
题目传送门C. Chef Monocarp题目大意厨师刚刚把菜放进烤箱。他知道第i道菜的最佳烹饪时间是tit_iti分钟。在任何正整数分钟,厨师最多只能从烤箱中拿出一个盘子。如果第i盘在某一分钟被端出,那么它令人不快的值就是iii和tit_iti之间的绝对差值。菜一出烤箱就放不进去了。厨师应该把所有的盘子从烤箱中拿出来。求厨师能获得的最小总不愉快值是多少思路dp[i][j]dp[i][j]dp[i][j]表示在第i道菜在第j分钟被拿出的最小总不愉快值注意点,n道菜最多2n2n2n时间被全部拿原创 2020-10-28 21:49:31 · 256 阅读 · 0 评论 -
B. Reverse Binary Strings
题目传送门B. Reverse Binary Strings题目大意给你一个01字符串,你每次可以选择一个连续的子串进行左右翻转求将其翻转成0,1交替出现的字符串的最小操作次数思路显然每次翻转只能改变子串的两端的字符,所以每次翻转最多改变一个连续两个的1和一个连续的两个的0即为每次操作可以使得连续的0和1的部分的连续长度减一所以最小的操作次数即为连续的两个0和1的数量的最大值AC Code#pragma GCC optimize("-Ofast","-funroll-all-loops"原创 2020-10-28 21:18:39 · 879 阅读 · 0 评论 -
A. Marketing Scheme
题目传送门A. Marketing Scheme题目大意有顾客想购买x(l<=x<=r)(l<=x<=r)(l<=x<=r)包猫粮,你可以选择a包猫粮并且将其打包,顾客会首先买打包好的,而后剩余的x mod ax\ mod\ ax mod a包猫粮将会一包一包买,除非x mod a ≥ a/2x\ mod\ a\ ≥\ a/2x mod a ≥ a原创 2020-10-28 21:07:40 · 330 阅读 · 0 评论 -
C. Mortal Kombat Tower(DP)
题目传送门Mortal Kombat Tower题目大意你和你朋友打游戏,给你一个长度为n的数组代表boss,数组中包含0和1,你朋友先手你可以打败任意boss而不消耗值,你朋友在打败1的boss时需要消耗1,每次可以选择打败1~2个boss求最小的通关花费思路开两个一维数组,分别为你朋友杀了第i个怪物需要的最小花费,你杀了第i个怪物的最小花费,可得dp1[i]=min(dp2[i−1],dp2[i−2])dp1[i]=min(dp2[i-1],dp2[i-2])dp1[i]=min(dp2原创 2020-10-04 17:51:56 · 278 阅读 · 0 评论 -
B. Negative Prefixes(贪心,构造)
题目传送门Negative Prefixes题目大意给你一个长度为n的数组a,每个数字对应一个0或者1,为0即为可以移动,你可以任意移动对应为0的数字使得前缀和数组p的最大值所在的位置最小输出移动后的数组思路为使得前缀和的最大值尽可能的早出现,所以我们需要将可以移动的值中大的值尽可能的往前放即为将可以移动的位置的值按非递增的方式培训然后插入不可移动中AC Code#include<cstdio>#include<algorithm>#include<io原创 2020-10-01 19:21:12 · 720 阅读 · 0 评论 -
A. Buying Torches
题目传送门Buying Torches题目大意初始时你有一根木棍,你可以选择下列操作的一种:1、用一根木棍换取x根木棍2、用y根木棍换成一个炭现在需要组成k根火炬(一根木棍一个炭),求最小操作数思路k根火炬需要的木棍数为k+k∗y−1k+k*y-1k+k∗y−1,求用操作1使得木棍数量不少于该数值的最小操作次数即可,最后加上k次换木炭就行AC Code#include<cstdio>#include<algorithm>#include<iostream原创 2020-09-29 08:21:07 · 158 阅读 · 0 评论 -
C. Link Cut Centroids(树重心)
题目传送门Link Cut Centroids题目大意给你一棵树的结点数n和n-1条边,你可以删除一条边再增加一条边,使得树的重心唯一重心部分性质:1、树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个重心,他们的距离和一样。2、把两棵树通过一条边相连,新的树的重心在原来两棵树重心的连线上。3、一棵树添加或者删除一个节点,树的重心最多只移动一条边的位置。4、一棵树最多有两个重心,且相邻。思路当重心只有一个时,只需要找到任意一条连接到它的边,删除再添加即可若有两个重心,则在原创 2020-09-28 13:24:43 · 231 阅读 · 0 评论 -
B. Maximum Product(枚举)
题目传送门Maximum Product题目大意给你n个数,从中取出五个数使得其乘积最大思路直接暴力枚举取的正数的个数,相应的获得负数的个数,乘积取最大即可AC Code#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>using namespace std;#define endl '\n'#define INF 0x3f3f3f3f3f3f原创 2020-09-15 09:32:56 · 409 阅读 · 1 评论 -
A. Subset Mex
题目传送门Subset Mex题目大意给你一个长度为n的数组a,你需要将其分成两个数组,使得其中未出现的最小非负整数的和最大思路首先第一个数必然是在数组a中就未出现的最下非负整数,这将使得在该数之前的所有数减1,然后再从0到max走一遍找到缺少的值即可AC Code#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>using namespace st原创 2020-09-15 09:02:13 · 277 阅读 · 0 评论 -
D. Discrete Centrifugal Jumps(单调栈&&dp)
题目传送门Discrete Centrifugal Jumps题目大意给你一个长度为n的数组h,求从h[1]h[1]h[1]到h[n]h[n]h[n]的最小步数每次可以从i移到j,i<ji<ji<j移动方式为:1、i+1=ji+1=ji+1=j2、max(hi+1,…,hj−1)<min(hi,hj)max(h_{i+1},…,h_{j−1})<min(h_i,h_j)max(hi+1,…,hj−1)<min(hi,hj)3、max(hi,hj)&l原创 2020-09-10 10:45:30 · 513 阅读 · 0 评论 -
C. Chocolate Bunny(思维)
题目传送门Chocolate Bunny题目大意求一个长度为n的数组每次可以输入两个值i和j询问,将会得到一个为pi mod pjp_i\ mod\ p_jpi mod pj返回值,最多可以进行2*n次询问思路注意到询问的最高次数为2*n次,所以每位最多在两次询问中确定再注意到pi mod pjp_i\ mod\ p_jpi mod pj,联想到小的值mod大的值为本身,所以可以通过不同方法询问两个值(即询原创 2020-09-09 20:47:09 · 404 阅读 · 0 评论 -
B. Big Vova(暴力)
题目传送门Big Vova题目大意给你一个长度为n的数组a,求一个数组b,可以使得数组c的字典序最大其中ci=GCD(b1,…,bi)c_i=GCD(b_1,…,b_i)ci=GCD(b1,…,bi)思路数据小,直接暴力第一个数肯定为a中最大的数,后面依次为能使得gcd最大的数即可AC Code#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>原创 2020-09-09 20:16:09 · 443 阅读 · 0 评论 -
A. Ahahahahahahahaha(构造)
题目传送门 Ahahahahahahahaha题目大意给你一个长度为n的01数组,你可以删除其中不超过n/2n/2n/2位,使得数组满足a1−a2+a3−a4+…=0a1−a2+a3−a4+…=0a1−a2+a3−a4+…=0思路首先看到删除其中不超过n/2n/2n/2位这句话就应该想到删去其中的一半了,也就是删除01两者中最少的那个,删0留1的时候注意要保留偶数位的1AC Code#include<cstdio>#include<algorithm>#includ原创 2020-09-09 20:09:25 · 283 阅读 · 0 评论 -
Codeforces Round #668 (Div. 2)题解ABC
A. Permutation Forgery题目传送门Permutation Forgery题目大意给你一个长度为n的数组a,求与其p数组相同的数组b数组p定义:a的两个相邻元素的和排序后的数组思路直接倒序输出即可AC Code#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>using namespace std;#define endl '原创 2020-09-07 23:07:39 · 260 阅读 · 0 评论 -
Codeforces Round #667 (Div. 3)题解ABCD
A. Yet Another Two Integers Problem题目传送门Yet Another Two Integers Problem思路两个数之间相差10的个数向上取整AC Code#include<cstdio>#include<algorithm>#include<iostream>#include<cmath>#include<cstring>using namespace std;#define endl原创 2020-09-05 12:08:24 · 404 阅读 · 0 评论 -
Codeforces Round #666 (Div. 2)题解ABC
A. Juggling Letters题目传送门Juggling Letters题目大意给你n个字符串,让你移动任意次后判断能否让每个字符串相等思路直接统计每个字符串中出现的字符串的个数和,判断和是否为n的倍数AC Code#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>using namespace std;#define endl '\n'原创 2020-08-31 10:43:46 · 1639 阅读 · 0 评论 -
Educational Codeforces Round 94 (Rated for Div. 2)题解ABCD
A. String Similarity在这里插入代码片题目传送门String Similarity题目大意给你一个n和一个长度为2∗n−12*n-12∗n−1的01字符串,对于给定字符串,你需要构造一个长度为n的字符串,其与原字符串的s[1..n],s[2..n+1],s[3..n+2],...,s[n..2n−1]s[1..n] , s[2..n+1], s[3..n+2], ..., s[n..2n−1]s[1..n],s[2..n+1],s[3..n+2],...,s[n..2n−1]全部相原创 2020-08-26 19:26:20 · 375 阅读 · 0 评论 -
Codeforces Round #665 (Div. 2)题解ABC
A. Distance and Axis题目传送门Distance and Axis题目大意给你一个点a的坐标n,求点b的坐标,使得∣OB−∣AB∣∣=K|OB-|AB||=K∣OB−∣AB∣∣=K思路先判断n和k的大小关系b在OA中每移动一个点改变的大小为2,所以判断n−kn-kn−k的奇偶性即可AC Code#include<cstdio>#include<algorithm>#include<iostream>using namespace原创 2020-08-22 12:20:32 · 1034 阅读 · 0 评论 -
Codeforces Global Round 10题解ABCD
A. Omkar and Password题目传送门Omkar and Password题目大意给你一个长度为n的数组,每次可以合并两个相邻且不同的数,问最后数组最小的长度思路其实答案只有1或者n,因为全部一样肯定是n,如果有一个不一样,它可以和其他的结合到最后为1AC Code#include<cstdio>#include<algorithm>#include<iostream>using namespace std;#define endl原创 2020-08-20 18:49:27 · 221 阅读 · 0 评论 -
Educational Codeforces Round 93 (Rated for Div. 2)题解A、B、C、D
A. Bad Triangle题目传送门Bad Triangle题目大意给你一个长度为n的数组,让你从中选出i,j,ki,j,ki,j,k,满足1≤i<j<k≤n1≤i<j<k≤n1≤i<j<k≤n,其中ai,aj,aka_i,a_j,a_kai,aj,ak不能构成一个三角形思路将序列排序后直接判断第一个,第二个和最后一个能不能构成三角形即可AC Code#include<cstdio>#include<algorithm>原创 2020-08-15 12:09:47 · 1887 阅读 · 1 评论 -
Codeforces Round #664 (Div. 2)题解ABCD
A. Boboniu Likes to Color Balls题目传送门Boboniu Likes to Color Balls题目大意给你四种颜色的球,给你一种操作:选择前三种各一个,将这三个变成最后一种,你可以执行任意次该操作问,球的数量可不可以形成回文思路分情况考虑一下球的奇偶性就行,奇数有0个,1个,4个都是可以的,奇数为3个的时候就需要分别考虑了,如果其中无0的话直接将前三个转成最后一个,就是三偶一奇了,有0的话只能在d上,不然就NOAC Code#include<cstd原创 2020-08-13 10:15:20 · 1385 阅读 · 0 评论 -
Codeforces Round #661 (Div. 3)题解A、B、C、D
A. Remove Smallest题目传送门Remove Smallest思路注意到数据范围很小(1≤ai≤1001≤ai≤1001≤ai≤100),求得输入的数组中的最小值和最大值,从最小到最大走一遍,看是不是其中的每个值都有,若无则NO,全有则YESAC Code#include<cstdio>#include<iostream>#include<cmath>#include<cstring>using namespace std;原创 2020-08-06 19:47:46 · 199 阅读 · 0 评论 -
Codeforces Round #659 (Div. 2)题解A、B1/B2、C
A - Common Prefixes题目链接https://codeforces.com/contest/1384/problem/A思路直接看官方题解吧,直接建立一个200长的字符串,然后反转每次输入的数组的位置,原因稍微想一下就知道了代码#include<cstdio>#include<iostream>#include<string>using namespace std;#define INF 0x3f3f3f3f// #defi原创 2020-07-25 23:21:42 · 186 阅读 · 0 评论 -
Codeforces Round #658 (Div. 2)题解ABC(1.2)D
A. Common Subsequence题目链接https://codeforces.com/contest/1382/problem/A思路数据不是很大,直接vis标记一下在a中出现过的数,然后在b中遇到相同的数记录一下就可以代码#include<stdio.h>int t, n, m, temp, flag;int a;int main(){ scanf("%d", &t); while(t--){ int vis[1009原创 2020-07-22 18:02:18 · 232 阅读 · 0 评论 -
Codeforces Round #657 (Div. 2)ABC题解
A. Acacius and String题目链接https://codeforces.com/contest/1379/problem/A思路解题的时候觉得太暴力了,以为有更好的方法就直接放弃了,结果真的就是暴力(哭辽)(字符串与‘abacaba’暴力匹配(?不算匹配成功)记为函数count)1、首先直接count,如果匹配到成功的次数大于2,直接输出NO,成功次数等于1书输出YES,并且将字符串的?替换成除abc外任意字符,成功次数为0考虑处理?后进行匹配。2、对字符串进行暴力匹配(原创 2020-07-20 00:35:12 · 483 阅读 · 0 评论 -
Codeforces Round #656 (Div. 3)ABCDE题解(递归二分、拓扑)
A. Three Pairwise Maximums题目链接https://codeforces.com/contest/1385/problem/A思路将a, b, c非递减排序后得,x=b,y=z=c若y 不等于 z则无解,否则a=1, b=x, c=y是一组解代码#include<cstdio>#include<iostream>#include<cmath>using namespace std;const double pi = a原创 2020-07-19 14:26:31 · 298 阅读 · 0 评论 -
Educational Codeforces Round 91 (Rated for Div. 2)题解
A. Three Indices题目链接https://codeforces.com/contest/1380/problem/A思路直接遍历数组找到一个值比它左右的值都大的即可原因:如果该值存在,则该点必定为最大值,左右的值至少有一个比它小代码#include<cstdio>#include<iostream>#include<math.h>using namespace std;#define INF 0x3f3f3f3fint mai原创 2020-07-14 14:18:08 · 484 阅读 · 0 评论 -
Codeforces Round #655 (Div. 2)题解
A. Omkar and Completion题目链接https://codeforces.com/contest/1372/problem/A思路只需要满足表达式直接输出n个1即可代码#include<cstdio>#include<iostream>#include<math.h>using namespace std;int main(){ int t; cin>>t; while(t--){ int原创 2020-07-12 20:00:13 · 449 阅读 · 0 评论 -
Codeforces Round #654 (Div. 2)题解
A. Magical Sticks题目链接https://codeforces.com/contest/1371/problem/A思路稍微想一下,很明显的求中位数即可代码#include<cstdio>#include<iostream>#include<math.h>using namespace std;int main(){ int t; cin>>t; while(t--){ lon原创 2020-07-12 17:12:41 · 280 阅读 · 0 评论 -
Codeforces Global Round 9全题解
A. Sign Flipping题面:给你一个n大小的数组(n一定为奇数),现在你可以改变其中元素的符号(+/-)在操作后,使得有至少一半的ai <= ai+1,至少有一半ai >= ai+1,现在让你构造出这个数组思路:1、直接正负正负(或者负正负正)的一直下去,由于n为奇数,那么肯定就满足条件2、直接在全取绝对值,然后正负正负(或者负正负正)。代码:#include<stdio.h>#include<iostream>using namespa原创 2020-07-07 13:44:51 · 1002 阅读 · 0 评论 -
C. Linova and Kingdom题解
Codeforces Round #635 (Div. 2) C. Linova and Kingdom题解 贪心解法: 如果选择某个节点 i 作为旅游城市,那么对增加的度就是以节点 i 为根的子树(不包括节点 i )包含的节点数量对减少的度就是节点 i 的所有祖先节点中的旅游城市数量。 所以每个节点对答案的贡献就可以转化成 以节点 i 为根的子树(不包括节点 i )包含的节点数量 ...原创 2020-04-17 18:21:57 · 217 阅读 · 0 评论