自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 洛谷-P3374-树状数组模板题

题目链接题意:给你一个数组,对这个数组进行单点修改或区间求和.思路:树状数组模板代码:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);const int N=1e6+7;const int inf=0x3f3f3f3f;int n,m,tree[2000005];in

2020-05-31 21:35:19 226

原创 洛谷-AT2827最长上升子序列(dp)

题目链接题意:给定一长度为n的数列,请在不改变原数列顺序的前提下,从中随机的取出一定数量的整数,并使这些整数构成单调上升序列。 输出这类单调上升序列的最大长度。数据范围:1<=n<=1000001<=n<=100000思路:dp代码:正常求LIS的方法应该下面这种:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_with_st

2020-05-30 20:48:32 408

原创 Educational Codeforces Round 88 (Rated for Div. 2)-C. Mixing Water

题目链接题意:你有温度为h的热水和温度为c的冷水,你可以向一个温度为t的水桶中轮流倒入热水和冷水(必须从热水先开始),求倒入几杯水时桶内水的温度最接近桶的温度。思路:桶内水的最高温度为h,最低为(h+c)/2,奇数杯加水会让一杯热水的温度均分到一整桶水中,后续的奇数杯加水只会让水温越来越接近(h+c)/2,所以我们要判断加到第几杯水时的温度最接近桶的温度,也就是让(h-(h+c)/2)/奇数杯的水接近t-(h+c)/2。代码:#include<bits/stdc++.h>using

2020-05-29 21:29:49 284

原创 Codeforces Round #645 (Div. 2)-D. The Best Vacation(思维,二分,lower_bound,upper_bound)

题目链接题意:我们假设每年有n个月,每个月有a[i]天,你可以连续的拜访你的朋友x天(x<n)以获得开心值,每天所能获得的开心值是该天在这个月中的第几天,求你能够获得的最大开心值是多少。思路:因为开心值是在一个月中顺序递增,那么我们拜访的这些天应该以一个月末结尾,所以我们将两年合并起来(可能会出现本年年末加上次年年尾的情况),枚举每个月的月末,然后二分查找前第x天的日期,最后计算出这x天内的开心值,最后与最大值比较即可,中间利用前缀和思想来减少重复计算。知识点:lower_bound( b

2020-05-28 18:53:04 321

原创 Codeforces Round #645 (Div. 2)-C - Celex Update(思维)

题目链接题意:给你一个由顺序的数字斜向摆放而成的方阵,求从矩阵的(x1,y1)点到(x2,y2)点所经过的路程的数字相加一共能有多少种不同的结果(期间只能向右或向左走)。思路:求路程数字最大值和最小值的差就是结果,因为是顺序数字斜向摆放,所以横向与竖向数字之间的差值刚好是abs(x1-x2)和abs(y1-y2),所以答案就是abs(x1-x2)*abs(y1-y2)+1。代码:#include<bits/stdc++.h>using namespace std;#define

2020-05-27 18:48:35 239

原创 Codeforces Round #644 (Div. 3)-H. Binary Median(二进制)

题目链接题意:有一堆二进制数(01串,按字典序排序),从0到2m-1 ,我们删除其中n(n<=100)个数,再输出这些数的中位数。思路:因为是去除n个字符串,所以k只能向右移动。这里只需要对n个字符串转换为十进制从小到大进行排序,然后如果有a[i]≤k,k就++,最后将k转换为十进制输出。代码:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_with

2020-05-26 19:34:24 183

原创 Codeforces Round #644 (Div. 3)-F. Spy-string(暴力枚举)

题目链接题意:给你n个长度为m的字符串, 求一个长度为m的字符串使得所有的n个字符串都与该字符串相差1个或以下字符。思路:数据很小,所以我们暴力跑~~(hhh我的某个朋友肯定很喜欢这道题)~~ ,我们将第一个字符串的每一个字符都用26个字母替换一边,看有没有符合的字符串。代码:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_with_stdio(false

2020-05-25 21:35:58 207

原创 Codeforces Round #640 (Div. 4)-D. Alice, Bob and Candies

题目链接题意:两个人吃糖果,每次吃的数量必须比上一个人吃的多,给你一个数组(糖果堆),每一堆有随机数量的糖果,a从左边开始吃,b从右边开始吃,必须吃整队的糖果,a先开始,然后b再吃,注意,后面所吃的糖果数必须严格大于之前吃的。思路:应该算是一个模拟,建立一个数组代表糖果堆,然后用两个循环模拟吃糖果的方式。代码:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync

2020-05-24 13:16:56 210

原创 E. Special Elements(前缀和)

题目链接题意:给你一个数组,如果其中一个数是连续的两个或更多的数的和,那么我们称这个数为特殊数,求数组中有多少个特殊数。思路:利用前缀和思想,再遍历做差,用一个flag数组标记做差的值。代码:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);const int N=1e6+5

2020-05-23 21:13:00 539

原创 Codeforces Round #641 (Div. 2)-C. Orac and LCM(数论,gcd,lcm)

题目链接题意:给你一个数组,求数组中所有元素之间的lcm的gcd。思路:公式推理题(暴力跑铁定T),最终你可以推理得到这个公试:GCD(LCM(a,b),LCM(a,c))=a*GCD(b,c)/GCD(a,b,c);所以你只需要求出一个元素之后所有元素的GCD,再放入公式就可以得出答案了。代码:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_with_

2020-05-22 19:43:42 892

原创 Educational Codeforces Round 86 (Rated for Div. 2)-D. Multiple Testcases(优先队列,贪心)

题目链接题意:有n个数。划分成一些组。要求是每个组内大于等于i的数不超过c[i]个,求划分出最少的组数和构成方案。思路:将a[i]数组从大到小排序,再创建一个pair<int,int>的优先队列,first存数组中元素个数,second存数组下标,然后顺序选取a[i](之前已经排过序),如果该数组中元素数小于c[a[i]],那么a[i]就可以放入该数组中,然后将数组元素+1放回队列。代码:#include<bits/stdc++.h>using namespace st

2020-05-22 00:00:27 291

原创 Educational Codeforces Round 86 (Rated for Div. 2)-C. Yet Another Counting Problem(数论,gcd)

添加链接描述题意:给你三个数a,b,q,查询q次,每次一个区间,寻找该区间内有多少个x,使得(x%b)%a!=(x%a)%b.思路:先求a,b的最小公倍数,每个最小公倍数是一个循环,我们只需要求所查询的区间内有多少个完整的最小公倍数区间,再加上其余不完整的部分就ok。代码:#include<bits/stdc++.h>using namespace std;const int N=1e5+5;const int inf=0x7fffffff;const int mod=1e9

2020-05-21 20:35:49 181

原创 Codeforces Round #642 (Div. 3)-E K-periodic Garland(字符串,贪心)

题目链接题意:给你一个长度为n的01串,每次操作可以将其中一个0变成1,求使得字符串中所有1的距离都是k的最小操作数。思路:双层循环,第一层跑k的余数,第二层跑该余数所在的间隔串里最多有多少连续的间隔为k的“1”,最后用字符串中所有的1的个数,减去最多且连续的间隔为k的“1”的个数得出结果。代码:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_with_s

2020-05-20 20:42:48 311

原创 Educational Codeforces Round 87 (Rated for Div. 2)-B - Ternary String(字符串)

题目链接题意:给你一个只含123的字符串,找出长度最短的且含1,2,3的字符串(连续的).思路:用三个数字记录最近出现的1,2,3,用最大值减去最小值,就是含1,2,3的最短的字符串,然后和最短长度比较。代码:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);const in

2020-05-19 20:57:09 175

原创 Educational Codeforces Round 87 (Rated for Div. 2)-(C1+C2)(数学,思维)

题目链接C2 题目链接C1题意:给你一个由2*n个点组成的正多边形,边长都为1,求能够把该多边形放进去的正方形的最小边长。C1中n为偶数,C2中n为奇数。思路:数学题,画图可知,当n为偶数时,正方形最小边长就是正多边形的高,当n为奇数时,需要让正方形旋转到与多边形形成一定的角度(2pi/8n)。代码:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_wit

2020-05-18 19:40:36 369

原创 Codeforces Round #643 (Div. 2)-C. Count Triangles(差分,前缀和)(避免标题重复率的小括号)

题目链接题意:给你a,b,c,d,保证a<=b<=c<=d,问你有多少个x,y,z符合a<=x<=b<=y<=c<=z<=d,并且x,y,z能组成三角形。思路:先算x,y两条边能组成多少种三角形,然后计算每一种三角形z能够满足的数量,相加就是结果。代码:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_w

2020-05-17 20:40:44 373

原创 Board Moves(思维,图形变换?)

题目链接题意:给你一个nn的矩阵(n为奇数),每一个位置都能一次移动到与他相连的八个位置其中一处,问至少需要几次移动可以将该矩阵变为一个点。思路:n为奇数,那么我们可以把这个矩阵看做一个靶子,中心位置为靶心,靶子向外一层,所需要的移动步数也会增加一步,第i层的数字个数可以用ii-(i-1)*(i-1)来计算,层层相加就是结果。代码:#include<bits/stdc++.h>using namespace std;int main(){ int t; cin&

2020-05-16 19:14:57 840 3

原创 Codeforces #642 D. Constructing the Array(dfs,二分)

题目链接题意:给你一个全为零的数组,执行n次操作,第i次操作为:选取一个最大的全为零的子区间(相同长度时取左),将该区间的中间位置的数字变为i,问n次操作后的数组会变成什么样子。思路:取中间值然后每次缩小一半,很明显有二分的性质,所以我们用dfs来二分搜索该数组,搜索时用pair记录子区间长度和中间值,然后将按照搜索的子区间的长度排序,排序后的第i个就是第i次操作的位置,然后将位置不变填入i,然后输出。代码:#include<bits/stdc++.h>using namespac

2020-05-15 20:46:44 159

原创 Codeforces Round #641 (Div. 2)-D. Orac and Medians(为了避免重复率过高而存在的小括号)

题目题意:给你一组数字,你可以将任意区间的数字全部变为该区间的中位数(若区间长度为偶数则取左),问是否能将该数组中的数字全部变为同一个数字k。思路:如果我们能够变出两个或以上相连并且相同数,那么这两个数就可以同化周围的所有数字,当他同化到值为k的数字的旁边时,如果该数字比k小,那么我们无法将该数字变成k,因为题目中说了“若区间长度为偶数则取左”,所以我们的目标就变成了:变出两个或以上相连且相同的比k大的数,这样我们就能够通过这两个数将整个数组中的数字全都变成k(出现了!究极白嫖怪!)。那么我们该如何

2020-05-14 20:39:54 165

原创 洛谷 P1072 Hankson的趣味题(最大公约数,最小公倍数,数论,思维)

题目题意:已知正整数a0,a1,b0,b1,设某未知正整x满足gcd(a0,x)==a1,lcm(b0,x)==b1。求满足该条件的x的个数。思路:首先要知道gcd(最大公约数)和lcm(最小公倍数)该如何求。求最大公约数:int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}求最小公倍数:int lcm(int a,int b){ return a*b/gcd(a,b);}读题可以得出,x是a1的倍数,同时也是b1的因

2020-05-13 20:48:53 328

原创 Gym-102152-D - XOR Permutations(异或,思维)

题目链接题意:给你三个十位的二进制数字,你可以任意改变他们的“0”和“1”的位置,求这三个二进制数字异或的最大值。思路:如果三个二进制数字中1的数量小于10,那么直接输出所有1然后补零,如果大于10,已知两个1可以相互抵消变为0,那么可以先抵消掉能够抵消的1,然后剩余的1再排列(思路有点抽象,具体还是要看代码)。代码:#include <bits/stdc++.h>using namespace std;const int inf=0x3f3f3f3f;const int N=

2020-05-09 02:04:36 219

原创 Gym-102152-K. Subarrays OR(dp,异或,思维)

题目链接题意:给你一个数组,求这个数组的所有字段“|”的不同的值有多少个。思路:set去重,数据1e5,暴力跑n方肯定会t,所以我们过程中开一个set(应该算是dp)来记录之前“|”过的区间的值。代码:#include <bits/stdc++.h>using namespace std;const int inf=0x3f3f3f3f;const int N=2e5+7;#define IOS ios::sync_with_stdio(false);cin.tie(0);c

2020-05-09 01:56:23 204

原创 Gym-102152-J Grid Beauty

题目题目描述:给你一个二维数组,如果二维数组上下两行对应位置的数字相同则称这两个数字完美,你可以移动任意次,求这个二维数组的最大完美值。思路:直接默认数字已经移动好,比较该数字在上一行的个数和在下一行的个数,取最小值。代码:#include <bits/stdc++.h>using namespace std;const int inf=0x3f3f3f3f;cons...

2020-05-07 23:05:34 188

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除