自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hunxuewangzi的博客

一名正在努力的蒟蒻acmer

  • 博客(40)
  • 收藏
  • 关注

原创 Codeforces Beta Round #51 D. Beautiful numbers 题解(数位dp+离散化)

题目链接题目大意就是求区间内能被所有位上的数字(!0)整除的数的个数题目思路首先这很明显是一个数位DP满足被所有位上的数字(!0)整除的数 其实就是满足被这些位数的lcm整除然后就是怎么处理一个数在不断变化中 还要对lcm{xi}取模呢这时候就要仔细思索其中的奥妙 也是本题最重要的一点.首先lcm{1~9}=2520;想到每个数都是1~9中某些数字的lcm 所以他们一定能整除2520因为 若a≡b(mod m) 且d|m 则a≡b(mod d);转化一下设b已经是对m取完模的了于是得

2020-05-30 23:26:37 508

原创 HDU Balanced Number 题解(数位dp)

题目链接题目大意给定区间[a,b],求区间内平衡数的个数。所谓平衡数即有一位做平衡点,左右两边数字的力矩想等。题目思路显然除了0以外,所有的数最多只有一个平衡点遍历每一位做为平衡点,进行搜索,sum保存数字乘以距离的和,若sum为0,则说明平衡。但是sum可能为负数,所以加一个偏移量2000,当sum=2000则平衡。注意0会被多算,要-cnt+1,还有记忆化的时候应该是if(!limit&&dp[pos][sum][mid]!=-1){ return dp[

2020-05-30 21:28:47 257

原创 HDU X mod f(x) 题解(数位dp)

题目链接题目大意在1<=L<=R<=1e9内,找出有多少个数mod(自己每一位数和)为0题目思路显然是数位dp,但是比较巧妙的是要,枚举mod,还有这个卡空间,不能直接return dp[pos][mod][digsum][digmod][limit],就是不要你乘以两倍。。。可以令 dp[pos][mod][digsum][digmod]都为limit==0的时候就行了注意要memset(dp,-1,sizeof(dp)),因为dp可能是等于0,要不然就会tle代码#inc

2020-05-30 00:08:41 222

原创 Educational Codeforces Round 88 (Rated for Div. 2) E Modular Stability 题解(组合数学+逆元+取模)

题目链接题目大意让你设计出长为k,且1<=a[i]<=n,且数组严格单调上升。使任意正整数x使其以任意顺序mod数组的所有元素值都相等题目思路感觉比较好想,当a1为一个数d,其他数都为d的倍数的时候,无论怎么交换,答案都是n%d.注意求inv的时候没必要每一个都求逆元,可以求一个,然后其他的递推代码#include<cstdio>#include<algorithm>using namespace std;const int maxn=5e5+5,mo

2020-05-29 15:40:29 289

原创 Educational Codeforces Round 88 (Rated for Div. 2) D. Yet Another Yet Another Task 题解(思维)

题目链接题目大意给你一个长小于等于1e5的数组,-30<=a[i]<=30,求连续的一段区间内,max(数组元素总和减去区间内数组的最大值的答案)题目思路此题比较巧妙,其实这种题目看到a[i]的取值范围就要想到枚举最大值,然后就行了代码#include<cstdio>#include<algorithm>using namespace std;const int maxn=1e5+5;int n,a[maxn],ans;int main(){

2020-05-29 11:49:31 503

原创 Codeforces Round #645 (Div. 2) E - Are You Fired? 题解(思维)

题目链接题目大意给你一个长为n的数组前(n+1)/2个数为a[i],后面的数为x,让你求出一个长度k使其所有连续为k的数组之和都大于0题目思路首先要找性质,如果k满足,那么显然k*2也满足那么以此类推,可以发现只要存在那么就可以找到一个k>n/2的数。接下来分类讨论当x>=0,显然只要看pre[n]是不是大于0即可当x<0,肯定这个k>n/2,然后推一下就行了代码#include<map>#include<cmath>#include&l

2020-05-27 16:21:24 458 1

原创 Codeforces Round #645 (Div. 2) D - The Best Vacation 题解(二分+思维)

题目链接题目大意一年有n个月,每个月有d[i]天,让你找出连续x天,使其日期的总和最大,可以跨年题目思路这里要发现一个性质:即连续的x天一定满足最后一天在月份的结尾,结论是显然的。然后用两个前缀和,然后二分,二分的方法是二分差值值得学习代码#include<map>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>const int maxn

2020-05-27 11:11:39 369

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

题目链接题目大意有一堆二进制数(01串,按字典序排序),从0到2^m-1 ,我们删除其中n(n<=100)个数,再输出这些数的中位数题目大意这个二进制化为十进制真的有点巧妙。。。可以观察其实,发现m最多为60就应该要思考化为十进制。因为是去除n个字符串,所以pos只能向右移动。这里只需要对n个字符串转换为十进制从小到大进行排序,然后如果有a[i]≤pos就右移动一位。这里从小到大排序是防止pos移动到删掉的字符串位置。ep:pos0=5,a1=6,a2=5。这里pos移动到6就停了。代码

2020-05-26 21:11:21 194

原创 Educational Codeforces Round 87 c1 c2 题解(计算几何)

前置知识#define pi acos(-1.0) 是因为 acos为cos的反函数 cos(pi)=-1使用三角函数都要换为弧度制,角度制*pi/180=弧度制C1. Simple Polygon Embedding题目大意给定一个边长为 1 的正 2n 边形,求外接正方形的最小面积,n为偶数题目思路如果您仅想象n为偶数时2n-gon的外观,就不难提出一个解决方案。 解决方案是旋转2n-gon,使它的几个边平行于正方形的边。代码#include<cstdio>#inclu

2020-05-26 14:24:38 270

原创 第七届Code+程序设计全国挑战赛 补题

最小路径串题目描述n 个点 m 条边的无向图中,所有点用从 0 开始的 6 位数字串编号,即 000000、000001、000002、……直到 n−1 对应的 6 位数字串。保证 n≤106,所以 6 位的编号不会溢出。对于除了 000000 以外的每个点,你需要找到一条从 000000 出发且不经过重复点的路径,使得路径上所有点的数字串顺次连接形成的串的字典序最小。比较两个不同的串的字典序的方法是:如果其中某个串是另一个的前缀,则较短的串字典序较小;否则,找出两个串从左往右扫描时遇到的首个不相等

2020-05-23 22:50:08 478

原创 E - Chilly Willy 题解(打表)

题目链接题目大意给你一个n,要你找出长度为n的数可以被210整除题目思路emm这都没做出来。。。。显然这种题目是找规律题目,打个表找个规律就出来了代码#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n;char s[][4]={"050","080","170","020","200","110"};int main(){ scanf("

2020-05-21 19:32:35 179

原创 Codeforces Beta Round #93 (Div. 1 Only) B. Password 题解(hash+kmp)

题目链接题目大意给出一个字符串,让你判断是否存在一个字符串的同时出现在字符串开头,中间(不能从第一个字母开始或者以最后一个字母结尾),和最后。若存在求其最长题目思路hash:看到第一眼觉得是Kmp,但自己基本不怎么知道kmp,想用hash水一下,先写了一下hash+二分,但后面发现其实他并不满足二分的条件。举个例子,假如说你判断前缀为4的时候,答案是不存在的,但这并不能说明前缀为5或者3的时候是不存在的。那么就直接暴力二分,居然过了o(n^2),应该数据有点水kmp:待补hash#includ

2020-05-21 16:46:35 313

原创 Codeforces Beta Round #33 (Codeforces format) B. String Problem 题解(floyd)

题目链接题目大意给出两个字符串,给出n个 a b x,表明字符a可以变成b,每次花费为x。问要想把这俩字符串变成一样的,最少花费多少。无法变就输出-1。题目思路很显然是预处理一下就行了,但是最开始我以为只能a->b,其实可以a->b->c,所以我就wa了,然后你可以等价于一个图,然后跑一遍floyd就行了,注意floyd的k在最外层循环代码#include<cstdio>#include<map>#include<math.h>#i

2020-05-19 21:57:10 153

原创 Codeforces Round #643 (Div. 2) E. Restorer Distance 题解(三分)

题目链接题目大意给你一个数组,要你使数组所有元素的值都相等且所消耗最小代价,增加1消耗a,减少1消耗r,转移1消耗m,求消耗最小代价题目思路如果增加减少都是1,转移是2,那么就是类似于仓库选址问题,直接找中位数,而这个不是,就是稍微改编了一下,三分一下就行了代码#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;const int maxn=1e5+5;int n

2020-05-18 17:40:58 256

原创 Codeforces Round #643 (Div. 2) D. Game With Array 题解(构造)

题目链接题目大意要你构造一串长度为n总和为s的数组,求其是否满足一段连续的数组和为k或者s-k,0<=k<=s题目思路其实感觉这些题目都是靠猜,猜一下就出来了,当s>=2*n,那么就可以n-1个数全部为2,另外一个为s-2n+2,则当k=1,肯定就不满足。代码#include<cstdio>using namespace std;const int maxn=1e6+5;typedef long long ll;int n,s;int main(){ s

2020-05-18 14:52:39 201

原创 Codeforces Round #643 (Div. 2) C. Count Triangles 题解(思维)

题目链接题目思路显然是找x+y>z即可,其实只要枚举x+y即可,自己好菜qwq代码#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;int a,b,c,d;ll ans;int main(){ scanf("%d %d %d %d",&a,&b,&c,&d); for(int i=max(a+b,c);i<=b+c;

2020-05-18 14:46:21 252

原创 Educational Codeforces Round 87 (Rated for Div. 2) D. Multiset 题解(思维+二分)

题目链接题目思路我用的是vector加二分,但是t了,后面了解到rease和insert的操作是o(n)的复杂度,感觉以后这个操作没什么用了。。看了一个神仙二分,判断每个数相对于这个多重集合的大小,二分这个集合中最小的元素。还有我居然以为1e6在28mb放不下我少算了一个0。。。tle代码#include<cstdio>#include<vector>#include<queue>#include<cstring>#include<a

2020-05-17 23:49:56 302

原创 Codeforces Round #643 (Div. 2) B. Young Explorers 题解(贪心)

题目链接题目大意每个人都有一个缺乏经验值,值为ei的人只能加入大于等于ei个人的团,求最多能组成多少个团,有的人可以不用组团题目思路其实就是一个简单贪心,我好菜啊qwq,这都不会写,直接看代码吧代码#include<cstdio>#include<vector>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;const int ma

2020-05-17 15:02:17 385

原创 Codeforces Round #643 (Div. 2) A. Sequence with Digits 题解(打表)

题目链接题目大意给你a[1]和k,要你求a[k] a[n+1]=a[n]+minDigit(a[n])⋅maxDigit(a[n]).题目思路其实你会发现只要有0就会后面一直为0,打表发现规律即可代码#include<cstdio>#include<vector>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;const int

2020-05-17 14:45:48 291

原创 Codeforces Round #642 (Div. 3) F. Decreasing Heights 题解(dp+思维)

题目链接题目思路emmm这个题目如果找到一个性质就很好了,就是如果确定a[1][1]的值,那么就一下确定了,而且a[1][1]的值只有n*m个。因为如果最终的合法路径每个格子都被操作了至少一次,那么我们可以整体减少一次操作使其更优。代码#include<cstdio>#include<vector>#include<cstring>#include<algorithm>using namespace std;typedef long long

2020-05-15 14:21:42 263

原创 Codeforces Round #642 (Div. 3) E. K-periodic Garland 思维

题目连接题目大意给你一个01串,要你用最少的变化次数使得所有的1相邻的距离为k。变化的方式为1->0,0->1.要你求最少的变化次数题目思路emm完全没啥思路,看了题解,其实就是你要想这些数字1都是modk等于一个定值,那么你就可以用余数开始枚举。首先肯定时要统计所有1的个数 sum然后把 ai 中的字符 1 看成数字 1,字符 0 看成数字 −1,问题就变成了求 ai 中最大连续子序列和 (now)sum-now即为最优解。有些难解释,但是自己仔细思考应该就明白了。遇到此类题目就是

2020-05-15 09:58:49 504

原创 Codeforces Round #641 (Div. 2) E. Orac and Game of Life 题解(bfs)

题目链接题目大意就是一个n行m列的01矩阵,如果周围有一个和他一样的元素,那么a[i][j]就变成了!a[i][j],求经过z次变化后,a[i][j]题目思路其实你会发现如果一个元素一开始可以变化,那么他的相邻的相同元素也会变化,那么他就一直可以变化,而他如果一开始不能变化,过一段时间也可以随着别人的变化而变化,其时间就是和最近的那个一开始变化的曼哈顿距离(两个点在标准坐标系上的绝对轴距总和)还要注意一种情况就是他永远不会变化代码#include<cstdio>#include&

2020-05-13 16:21:16 308

原创 Codeforces Round #641 (Div. 2) D. Orac and Medians 题解(思维)

题目链接题目大意就是数组里一段数可以都变成他的中位数,问整个序列能不能变成k。可以变化很多次题目思路emmm,根本没什么思路,看了题解感觉根本想不到啊,但是仔细想想其实确实应该那么想。先令a[i]==1(a[i]==k) a[i]==0(a[i]<k) a[i]==2(a[i]>k),因为是合并其实只要知道相对k的大小即可其实肯定是想一次合并的时候先想合并区间小的,为什么呢,因为你区间太大,你不好想啊。。。那么首先考虑区间长度为2,你会发现要把他们全部变成1只有可能是1,2。你1

2020-05-13 11:53:29 162

原创 Codeforces Round #641 (Div. 2) C. Orac and LCM 题解(质因数分解+快速幂)

题目链接题目思路emm,感觉和hdw学长的题目极其类似,但是自己还是没想出来,其实就是分解一下,然后找次小。因为 lcm的每个质因子的指数是这两个数的指数的max,然后lcm的gcd的指数是lcm里面指数的min注意:我本来是外层枚举a[i],内层枚举质数,但是我发现这样根本不好break,会tle。外层枚举质数,内层枚举a[i]即可break代码#include<cstdio>#include<cmath>#include<cstring>#incl

2020-05-13 10:41:02 389

原创 湖南多校第四场补题

f题题目大意:就是选取两端长为k的数组,使其合最大题目思路:我本来想的是先选一段最大的,然后再选一段,显然这个思路使错的,首先最大的有很多种,一下就hack了当然还有其他的hack方式。正解就是dp,qwq,直接看代码代码#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const int maxn=2e5+5;int n,k,a[maxn],sum[maxn],d

2020-05-11 17:01:26 144

原创 牛客 牛牛的揠苗助长 题解 (中位数+二分) 2019 USP-ICMC J. Weird Sanchola 题解(中位数+相邻的质数的最大差值)

牛牛的揠苗助长题目思路1:如果不增加,那么肯定是靠齐中位数,类似于仓库选址。2:假设经过无限长的时间后,我终于将所有水稻都调整到了一样高,这个同样高的高度是否能持续保持?显然是可以的对吧,因为每一天都仅有一个水稻的高度长高,所以我只要将自然长的水稻给他摁回去,就能一直保持他们都是同样高的。所以满足单调性可以二分。代码#include<cstdio>#include<cstring>#include<algorithm>typedef long long l

2020-05-11 09:23:41 269

原创 Codeforces Round #640 (Div. 4)F. Binary String Reconstruction 题解(构造)

题目链接题目大意要你构造出一个01字串满足每相邻的一对元素中,0,1,2个‘1’中的个数。题目思路我好菜啊qwq,看了一下题解真是简单的构造题。单独考虑情况n1 = 0,并分别打印n0 + 1个0或n2 + 1个的1。现在我们的字符串至少有一对“ 10”或“ 01”。 让我们形成长度为n1 + 1的模式“ 101010 … 10”。 因此,所有总和为1的子串都得到满足。 现在,让我们在第一个零之前插入n0个零。然后在第一个1之前插入n2个1,满足条件.代码#include <bits/

2020-05-10 10:13:48 148

原创 Codeforces Round #640 (Div. 4) G. Special Permutation

题目链接题目大意就是一个n,要你写出一个全排列满足所有相邻元素差值的绝对值大于等于2小于等于4.题目思路构造题,但是我没什么具体的思路,其实很简单。如果n <4,则没有答案。 您可以做一些手工确定。 否则,答案存在,并且有一种简单的构造方法:首先,让我们将所有奇数整数以递减顺序放入答案中,然后将4、2和所有其他偶数以递增顺序放置。 要测试它始终有效,您可以在本地运行某种检查器(可以在不到一秒钟的时间内非常快速地检查所有1000个测试,这有时可能很有用)。代码#include<cst

2020-05-10 09:44:13 289

原创 Codeforces Round #500 (Div. 2) [based on EJOI]C. Photo of The Sky(思维题)

题目链接题目大意就是给你2*n个数据,随便组成(x,y)n个点,求包括这些点的长方形的最大值。题目思路很容易想到先sort一下然后(a[n]-a[1])*(a[2n]-a[n+1]),后面会发现这是错的,这仅仅是一种情况,如 1,3,3,5。显然答案应该是0,但是这么算的话答案是4.还有一种情况就是把最小值和最大值分别作为横坐标上的左右两边,然后在中间区间对称寻找差值最小的,可以看出剩下...

2020-05-08 12:38:10 105

原创 树形dp题目讲解

题目链接1题目思路显然是一个树形dp,设dp[i][j]为第i棵树下有j个子节点的最大值,再利用背包来更新。注意的细节有点多,还有要逆向枚举。代码#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=2e2+5;int m,n...

2020-05-08 10:59:04 123

原创 Codeforces Round #639 (Div. 2) D - Monopole Magnets (bfs)

题目链接题目思路读了好久才读懂qwq我英语怎么这么菜如果北磁极和南磁极在同一列或者同一行,那么北磁极将会向南磁极的方向移动一个单元格。现在给定一张图,保证白格一定不会有北磁极经过,黑格一定会有北磁极经过。又要求每行每列都必须至少有一个南磁极。求最少安排多少个北磁极可以达成要求。题目大意首先判断不可能完成要求的情况。1:两个黑格之间存在若干个白格。2:存在全白行但不存在全白列3:存在...

2020-05-07 12:37:15 153

原创 Codeforces Round #589 (Div. 2) C. Primes and Multiplication(数学)

题目链接题目大意就是n!对x的每一个质因数进行一次“类似分解的操作” 然后乘起来mod(1e9+7)题目思路显然是要对x进行质因数分解,我看很多博主就用了质数筛筛了质数,其实没必要,自己直接分解得到也一定是质数(显然的)。注意最后剩余的那个可能也是质数,要判断一下。然后再随便搞一下,用个快速幂就行了,不难。代码#include<vector>#include<cst...

2020-05-07 10:08:10 128

原创 洛谷 P3087 [USACO13NOV]Farmer John has no Large Brown Cow S 题解(模拟)

题目链接题目大意就是给你cnt种描述相同特征的形容词,每一种形容词有num[i]个,然后要你用字典序排列,再去除一些,求第k大的题目思路显然是模拟题,但是也太难模拟了,其实求第k大的很简单。先标记要去除的牛的大小号 ,然后排序,如果相等于k,k就++就行了。注意这里要求进制,还有一堆东西都要注意,看代码把。代码#include<cstdio>#include<io...

2020-05-04 20:34:11 225 1

原创 牛客 Optimal Milking 题解(线段树维护区间合并)

题目链接题目大意给出一个n(n≤4e4)个数的数列{an}(ai≥1)。一个数列的最大贡献定义为其中若干个不相邻的数的和的最大值。进行m(m≤5e4)次操作,每次修改数列中的一个数并询问此时的最大贡献。题目思路看到题目,如果这个题不修改,那么就是一个简单的dp,然而他要修改,所以我只会暴力的o(n*m)题解看的我生活不能自理,居然是线段树维护区间合并。。可能是我以前写的线段树都太简单了吧...

2020-05-04 15:49:46 161

原创 湖南多校第三场补题

题目链接比赛链接i题题目大意就是给你一个只包含W,B字符的字符串,问最多能分成几个的子字符串,使每个子字符串的W与B的比例相同。题目思路:比赛的时候差不多想到了思路,就是因为每一串的比例都相同,那么肯定和总比例也相同,然后这样就行了,如果上一次计算少于这个比例,下一次计算大于这个比例。或者上一次大于这个比例,这次小于这个比例,那么中间肯定有满足情况的,然后就wa了。。因为你必须要保证其...

2020-05-03 15:22:36 224

原创 AtCoder Beginner Contest 165 F - LIS on Tree 题解(dfs+最长上升子序列的二分做法)

题目链接题目大意给你一颗树,求顶点1到其他所有顶点的最长上升子序列题目思路我本来以为是lca什么的,就感觉写不出,结果就是dfs就行了,然后回溯一下,和普通的最长上升子序列没太大的区别代码#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const ...

2020-05-03 10:41:57 1018

原创 AtCoder Beginner Contest 165 E - Rotation Matching 题解(思维)

题目链接题目大意有n个选手, m个比赛场地,为海m个比赛场地指定一对选手的编号 (一 个编号只能出现在一个比赛场地) ,来保证在之后的n轮比赛中,所有选手不会与同-选手比赛两次,每轮比赛后所有选手编号加1,编号n+ 1的变为1。题目思路一个选手最多的情况是要与m个人一人比一次,所以m对编号应取m个不同的间隔。即在[1, n]中取m对数,每对数间隔不同的长度。emm。。。怎么说了,感觉这个...

2020-05-03 09:11:48 360

转载 1348D - Phoenix and Science 题解(思维)

题目链接题目大意第一天有一个细胞质量为1,每一天白天细胞可以发生分裂(任意个发生分裂,前后质量守恒),晚上细胞质量增加(每个细胞质量增加1)。给定一个n,问至少要多少天,细胞总质量恰好达到为n(2≤n≤1e9)题目思路感觉很明显和二进制有关但是我就是不会写。。。。分析:先考虑分裂,分裂不会对细胞的总质量带来任何影响,只是会影响晚上细胞质量增加的值。若当前细胞数量为x,那么晚上细胞可以增...

2020-05-02 18:52:08 243

原创 Codeforces Round #638 (Div. 2) B. Phoenix and Beauty 题解(构造)

题目链接题目思路其实自己差不多想到这个方面,但是还是没有想透彻为了使某个数组的k美观,该数组必须是周期为k的周期。 如果数组a中存在超过k个不同的数字,则没有答案,我们将打印-1(因为数组不能以周期k为周期)。 否则,我们提出以下构造。考虑数组a中所有不同数字的列表。 如果少于k,我们将附加一些1(或任何其他数字),直到列表的大小为k。 我们可以将此列表打印n次。 我们的数组b的长度是nk...

2020-05-02 08:28:19 576

原创 codeforces 1284C New Year and Permutation 题解(组合数学)

题目链接题目大意就是给你一个n,求n的所有排列里区间左右端点的差等于区间内极差的区间的和题目大意本来想打个表找规律的结果没找出,我怎么这么菜qwq,其实就是简单的组合数学我们会发现其实满足这个条件的区间内的数一定是连续的。所以我们从区间长度入手,对于每个长度的区间看对应了多少个排列满足要求。这就很简单了呀。我们枚举区间的极差i,考虑选差值为i的i+1个数有n-i种选法,区间内的顺序随...

2020-05-01 08:52:47 202

空空如也

空空如也

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

TA关注的人

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