
思维
notmuch
这个作者很懒,什么都没留下…
展开
-
蓝桥杯系列 - 2017国赛 - 小数第n位
这道题应该不难想到下面这种思路:a * 10n+2 / b % 1000这样可以得出小数点后n ~ n + 2位数字,原理就是将a的小数点往后移动10n+2位。10n+2可以用快速幂算出来。题目中n的范围非常大,最大为109,意味着10n+2最大为1010^9,大数计算很耗时的,这么计算的话严重超时。于是对上述思路进行改进:在进行快速幂计算的时候,每次计算都取模b * 1000。这一原理是:我们只需要保留a * 10n+2中比b大3个数位的数即可,这样就能保证最终a * 10n+2 / b的整数部分原创 2021-04-30 14:52:03 · 206 阅读 · 0 评论 -
整数分块知识(转载)
分享一个整数分块的博客:C -求和公式(整除分块)原创 2021-03-01 19:41:05 · 174 阅读 · 0 评论 -
2019牛客国庆集训派对day2,G(思维)
首先,这道题要明确两点:1.因为可以删增的字符串当中没有一个包含’c’的,因此s,t中的c的个数必须相等才有可能Yes,否则必为No;2.因为可以删增的字符串当中,a,b的个数都是偶数,因此s,t中a的个数的奇偶性必须相同,以及b的个数奇偶性必须相同,才有可能Yes,否则必为No。不难分析出,s,t中的c把s,t分成一段段的,在c的个数相等的前提下,我们只要分析s中的每一小段是否能变成t中对...原创 2019-10-13 19:44:43 · 326 阅读 · 0 评论 -
牛客练习赛53,A(思维)
本来考虑用组合数求解,但发现挺复杂的。无奈暴力手推了几个数,发现是一个斐波那契数列的。#include<cstdio>#include<iostream>#include<cstring>using namespace std;typedef long long ll;const int maxn=1e5+5;const int mod=1e9+7...原创 2019-10-11 22:54:12 · 102 阅读 · 0 评论 -
牛客练习赛4 A(单调栈)
分析:设置结构体lap{ int m,s; },设置结构体数组l[n],按m从大到小排序。接下来遍历l[n],并用一个单调递减栈去维护,详解见代码。#include<cstdio>#include<iostream>#include<algorithm>#include<stack>using namespace std;typedef...原创 2019-07-22 17:59:47 · 128 阅读 · 0 评论 -
牛客练习赛4 B
思维题,把|i2-j2|+|Ai2-Aj2|绝对值符号去掉后,我们设i<j,那么此时会发现:|i2-j2|+|Ai2-Aj2|=j2-i2+Aj2-Ai2=(j2+Aj2)-(i2+Ai2)或者|i2-j2|+|Ai2-Aj2|=j2-i2+Aj2-Ai2=(Ai2-i2)-(Aj2-j2)原式化简后只有这两种形式,那么我们可以设置两个数组a[n],b[n],分别维护(i2+Ai2)...原创 2019-07-22 18:08:32 · 144 阅读 · 0 评论 -
Wannafly挑战赛4,C
思维题,一开始看觉得不难,但越想越复杂,弄得想不下去了,然后后来又再想想,就没之前想的那么复杂了。首先明确几点:1.割草机只能向“前”走,没法向上或返回走,因此它每到一行,就一定要先把这一行的杂草清除完,才可以准备进入下一行;2.割草机在奇数行的向“前”意味着向右,在偶数行意味着向左。每换一行就要换一个方向,好像有点复杂,那能不能转换成每行的方向都一样呢?比如每行都是向右?可以!不过这么做...原创 2019-07-22 20:57:31 · 107 阅读 · 0 评论 -
洛谷P1351 联合权值(无根树转化为有根树)
先将所给的图(无根树)转化为有根树,可以用一遍DFS完成。转化为有根树后,对于i点,能够产生与它联合权值的点,要么是它第一个祖先(孙子),要么是与它层数相同的兄弟。i与它的祖先(孙子)产生的联合权值容易计算,可以在O(1)内完成,但是与它的兄弟的权值,用朴素的算法就需要O(n)了,例如i1,i2,i3的父节点都为k,那么i1,i2,i3之间总的联合权值就为:2 * ( w[i1] * w[i2]...原创 2019-08-28 18:43:01 · 211 阅读 · 0 评论 -
2019牛客暑期多校训练营(第四场)A
题意:给定n个顶点,n-1条边权为1的边,将各个顶点连成一个最小生成树,再给定一个K,表示有多少个人,每个人都在特点的一个顶点上,现在这些人要相会,求使得这些人能够相聚在一起的最短时间。看了标程,答案就是K个人当中那2个距离最远的人的距离d,答案就是d/2向上取整。证明:必要性:K个人当中,最远的那2个人u,v要相遇,则其中一个必定至少要走⌈d/2⌉的步数。充分性:我们取最远那2个人u,v...原创 2019-08-01 00:35:57 · 181 阅读 · 0 评论 -
牛客,小A的柱状图(单调栈)
小白初次遇到单调栈,题解参考于:https://blog.youkuaiyun.com/qq_41608020/article/details/89294830重点:高度小的矩形整一个都可以与高度大的矩形的一部分合并,而高度大的矩形不能够整个与高度小的矩形合并。#include<cstdio>#include<iostream>#include<algorithm>...原创 2019-07-21 21:21:14 · 170 阅读 · 0 评论 -
牛客,String of CCPC(思维)
题意:给定一个长度为n的字符串s[n],s[n]只由C,P组成,定义s[n]的价值为:s[n]中不同的“CCPC”连续子串的个数。现可以向这个子串中插入一个C,P,但第i次操作,需要消耗i-1的单位价值。求s[n]的价值最大为多少。分析:稍微分析一下,可以发现,每次操作,最多只能使s[n]的价值+1,假如s[n]最初的价值为val0,如果第一次插入能使val0+1,则val=val0+1-0=...原创 2019-07-21 17:23:25 · 200 阅读 · 0 评论 -
吉首大学2019年程序设计竞赛(重现赛),G(思维)
这道题不难,但是还是想了好久。。。(太菜了)思路:设po[i],记录第i个O的位置;设sum0[i],记录s[0~i]中有多少个Z;设sum[i],记录s[i~len-1]有多少组RZ;最终答案:SUM(sum[po[1~cnt])#include<iostream>#include<stack>#include<cstdio>#include...原创 2019-07-20 23:00:54 · 125 阅读 · 0 评论 -
2019牛客暑期多校训练营(第一场),F
这道题原本是个数学题,但是不会证明,所以就暴力代值。。。题中的E必然是1 ~ 1/3倍S(ABC),即E=k*S,1/3<=k<=1,。因为三点A,B,C坐标都是整数,因此S(ABC)*2必然是个整数,又最终输出的36 *E又保证是个整数,即36 *E=18 *k/2 *2S(ABC)=18 *k’ *2S(ABC)必然是一个整数,由此可知18 *k’是个整数,由此可知k’是个分母为...原创 2019-07-19 23:51:57 · 272 阅读 · 0 评论 -
牛客网湖南大学第十五届程序设计竞赛(重现赛)——I Algorithm Choosing Mushrooms(思维)
一开始以为是动态规划,因为它其实是求满足特定要求的最大连续子列和及最长连续子列,所以就往动态规划求最大连续子列和的经典问题那个方向去思考,但是感觉行不通。后来突然想到,可以把前i个数的和记录进sum[]数组里,每个sum[i]取余m会有一个值,如果sum[i]%m=0,那么他是满足条件的,如果sum[i]%m!=0,那么sum[i]应减去他前面与它取余m所得的数相同的sum[k],即sum[i]...原创 2019-06-03 20:04:43 · 246 阅读 · 0 评论 -
牛客网湖南大学第十五届程序设计竞赛(重现赛)——G Longest Palindrome Substring(思维)
题意:给你一个字符串,判断他的最大回文子串的长度是否大于1,是输出YES,不是输出NO。突破口:小小的思维,只需判断字符串中是否有长度为2或者为3的字符串就好了,因为最大回文子串从中间延展开来的部分也一定是回文串。代码如下:#include<iostream>#include<cstdio>#include<stack>using namespace...原创 2019-06-02 10:41:02 · 210 阅读 · 0 评论 -
POJ2833,The Average(优先队列)
突破口:开两个优先队列q_ma,q_mi,前者维护前n1个最大的数,后者维护后n2个最小的数。原本打算用一个优先队列存储数据,但是如果全部都存的话会爆内存,而且还可能会超时,然后就想能不能用一个优先队列来存n-(n1+n2)个数就好(因为最终有效的数据个数就只有n-(n1+n2)个),这样就不会爆内存而且也省时,然而,发现这样存的话,当队列的大小达到n-(n1+n2)时,接下来没法判断下一个元素...原创 2019-05-30 21:21:57 · 242 阅读 · 0 评论 -
HDU2094,产生冠军
这道题关键是理解好题意吧。。。WA了很多次后,看了讨论区才知道题要求的是什么。其实题意是要你判断在赢的一方中,存在一个人不在输的一方,当这样的人不存在或者有多个时就不能产生冠军。我觉得这题就是很蜜汁的题,题意没讲清,逻辑也很神,比如这个样例:41 22 33 14 5要输出"Yes",因为4赢了而且不在输的一方。这逻辑也太那神了吧,4都不用跟1,2,3打,就判为冠军。真的无语。。。。...原创 2019-08-08 23:23:10 · 119 阅读 · 0 评论 -
[HAOI2010]计数(思维+组合数)
这道题个人认为有两个较难的点:①看起来很像,非常像,感觉是数位DP,但其实不是。。。。②原题虽然说不可含前导0,但其实有前导0也是没问题的,就比如说0012,12两个是一样的数。如果明确这两点之后,再加上组合数的一点知识,这道题就可以确定解题思路了。思路:枚举。。。怎么枚举?看代码吧。。#include<cstdio>#include<algorithm>...原创 2019-08-07 12:02:48 · 156 阅读 · 0 评论 -
牛客, Another Server
非常简单的网络流,或者作思维题,都可以不用网络流来解。然而还是WA了一遍,因为没有考虑到了数据范围,所以以此为戒,特意写了篇博客。。。#include<iostream>#include<algorithm>using namespace std;const int inf=0x3f3f3f3f;int r[105];int main(){ int...原创 2019-08-13 23:09:02 · 293 阅读 · 0 评论 -
codeforces,1215C(模拟 / 思维)
题意:给定两个只包含’a’,'b’的长度相同字符串s,t,要你将他们变成一模一样的串,你每次可以将s中的一个字符与t中的一个字符交换,最后输出次数并输出步骤。首先明确,相同的部分是不用动的,我们只需动不同的部分。其次,我们分析一下s[i]!=t[i]的情况,无非就是①s[i]=‘a’,t[i]='b’或②s[i]=‘b’,t[i]=‘a’,也不难分析出,①类型要和①类型(不能和自己)交换才可以...原创 2019-10-04 00:22:14 · 264 阅读 · 0 评论 -
CF1219C Periodic integer number(思维)
题意很清晰了,直接将思路。从样例的分析中我们不难发现,我们可以进行分类讨论:1.Len(A)%L!=0,那么我们直接以10…0作为循环节输出就好了;2.Len(A)%L==0:①A全部都为字符’9’,那么我们只能用1的方法解决; //特殊情况,注意!②A不全为字符’9’,那么我们设置ans[]记录循环节初始化为A[1]-A[L],s0[]作为中间对象,依次记录A[L+1]-A[2L], ...原创 2019-09-25 22:03:31 · 327 阅读 · 0 评论 -
CF1220C Substring Game in the Lesson(贪心)
题意已经讲得很清晰了,直接讲思路。先从简单的入手,如果s[k]=‘a’,显然必定是Mike赢,为什么呢?因为a已经是字典序最小的英文串了。如果s[k]=‘b’,Ann在什么情况下会赢?一开始l=r=k,现在Ann大致可以有两种操作,将r后移和将l前移,先说将r后移,不难想出,这种方案是无济于事的,因为’b’是字典序仅此于’a’的英文串。那么我们考虑将l往前移,显然,如果b的前面有’a’的话,An...原创 2019-09-25 21:47:59 · 250 阅读 · 0 评论 -
CF1221C Perfect Team(数学/思维)
定义一个Perfect Team为一个由3个人组成的队伍中,至少有一个人是coder,和至少一个是mathematician。有q次询问,每次询问给定c,m,x,分别表示coder, mathematician, 无特长的队员的数目,问你最多能组成多少个perfect team。思路:首先分析一个perfect team的可能组成:1.1c+1m+1x;2.2c+1m / 1c+2m;第...原创 2019-09-25 21:32:21 · 414 阅读 · 0 评论 -
洛谷P2205,画栅栏Painting the Fence(扫描线)
题解可参考下面博客:https://www.luogu.org/blog/MR-EK/solution-p2205扫描线,记录一条线段的左端点l,右端点r,当你"扫描"到l时,表示你进入了这条线段,当你扫描到r时,表示你离开了这条线段,所以这条线段的覆盖区间为[l,r)大概弄懂了这道题的思路,但是其实题意没完全弄懂,感觉很晦涩,没有说涂色的具体,所以我就大概讲一讲我个人的理解吧。扫描线...原创 2019-09-22 11:21:52 · 314 阅读 · 0 评论 -
牛客练习赛51,C(思维/构造)
贴题解:对小范围数据进行打表,即可发现存在以下规律:1.当n>2时总有方法可以构造2.当n是奇数总存在两条边b,c使得c-b=1并且n2+b2=c^23.当n是偶数总存在两条边b,c使得c-b=2并且n2+b2=c^2因此我们可以设边c=x,分n是奇数和偶数的情况,有1.n是奇数,b=x-1->n2+(x-1)2=x2->x=(n2+1)/22.n是偶数,b=x-...原创 2019-09-15 22:34:42 · 93 阅读 · 0 评论 -
The Preliminary Contest for ICPC Asia Xuzhou 2019,K(贪心)
这道题当时没做出来比较可惜,当时发现这道题的时候已经有点晚了,后来跟别人交流了一下,感觉也不算难,要是早点发现的话可能是可以做出来的。这道题看起来是有点难的样子,但其实是个纸老虎。我们直接贪心枚举就可以了:n个点,每个点都与其它所有的点(包括它自己)连线,连成的线段中都会生成一个中点,然后我们从这些中点当中找出出现次数最多的那个就行,设它的出现次数为num,则答案就为n-num。代码如下:...原创 2019-09-09 11:18:56 · 178 阅读 · 0 评论 -
The Preliminary Contest for ICPC Asia Xuzhou 2019,E(思维)
大致题意:有n个人,有n个数a[n],a[i]表示第i个人的能力值,给定一个m,m为buff值,现在问你对于第i人(1<=i<=n)人的能力值加上buff后,找到最右边的能力值大于他的人的位置j,然后输出i~j之间有多少个人,如果找不到则输出-1。最后要输出n个数这样的数,对应每一个人。最近做的区间题比较多,所以想法也逐渐大胆,最后也竟AC了。思路:将a[n]设置为结构体,a[n]...原创 2019-09-09 10:57:14 · 127 阅读 · 0 评论 -
POJ3728,The merchant(倍增LCA+分治)
题意:有n个城市,有n-1条边使各个城市相互直接或间接连通,给出一件货物在各城市的价格w[n],然后给出q个询问,每个询问有两个城市s,t,问从s到t的路径上买入卖出货物盈利的最大值。注意:在某个城市买入,只能够在其后经过的城市卖出。分析:假设询问从城市u到城市v的路径上所能获得的最大盈利值,又设lca为u,v的LCA,则u->v的路径就是u->lca->v,那么最大的盈利值就...原创 2019-09-06 19:04:12 · 215 阅读 · 0 评论 -
HDU2062,Subset sequence(思维+递推)
emmmmm,题解是看下面的大牛的:https://www.cnblogs.com/AOQNRMGYXLMV/p/3832909.html简单的说就是,由n个数字构成的所有排列,以1,2,3,…n,为开头的排列的数量是相同的,设为num[n],因此将m除num[n]就是第一个元素,然后不断地递推下去就行了。#include<cstdio>#include<iostream...原创 2019-09-04 23:35:42 · 231 阅读 · 0 评论 -
2019牛客暑期多校训练营(第十场)E(思维+递归)
题意:定义希尔伯特曲线在2k边长图的样子,给出n个点的坐标,求其根据曲线的顺序关系。看题解做出来的,膜拜大佬。。。先讲讲2k希尔伯特曲线是怎样画出来的:1.将2k-1通过主对角线对称后,放置在2k左上角;2.将2k-1放置在左下角和右下角;3.将2k-1通过副对角线对称后,放置在2k右上角。因为2k最大可以是232,要画出来后再去排序显然是不可能的,所以一定要根据某种规律去逐个坐标排序...原创 2019-08-22 20:01:24 · 111 阅读 · 0 评论 -
牛客网,2019年湘潭大学程序设计竞赛(重现赛)——C,Math Problem(思维)
想了一会儿,觉得可以先暴力打出1000,10000以内的符合要求的数,找找规律。果然,打出来就可以发现,满足条件的a=k*192+1,k为非负整数(可以证明得来,这里就不证了),而109/192差不多5e6+,不算很大,因此可以打个表来记录109内满足条件的数。代码如下:#include<cstdio>#include<algorithm>#include<i...原创 2019-05-10 23:40:00 · 183 阅读 · 0 评论 -
牛客网哈尔滨工程大学第十四届程序设计竞赛(同步赛)——I 杨主席发糖(思维)
突破口:递增序列从前往后给糖,递减序列从后往前给糖,由于某个递增序列结尾与后面的递减序列的开头相同,这个时候发给这个同学的糖的数量就会有两个,为了满足要求,这时候要给两者之间最大的那个数量。设置两个数组,分别记录递增与递减序列分发的糖数。代码如下:#include<cstdio>#include<iostream>#include<algorithm>...原创 2019-04-25 15:44:19 · 208 阅读 · 0 评论 -
17年广东省赛——C,Stokpie(思维)
Call对应函数式:K×X-P×X-CPut对应函数式:P×X-K×X-C分析:1.建立一个结构体,存储类型type(Call或Put),以及C,P,K。2.输入完后,按P进行从小到大排序。3.排完序后,每个区间段都已经分好了,接下来主要思考一下,对应区间的a,c的值3.1,假设我们现在的价格为X,那么,此时我们可以执行比X小的所有Call的指令,以及比X大的所有Put的指令。3.2...原创 2019-05-05 20:02:03 · 115 阅读 · 0 评论 -
杭电ACM——6463(思维)
突破口:一个很大的数,假设是20位,其每个数字的平方的和不超过2000,因此只要将2000以内的鸽子数找出来,打表就可以。代码如下:#include<cstdio>#include<cstring>using namespace std;long long ge[150005];long long yes[2001],no[2001]; //yes记录2000...原创 2019-03-17 13:56:24 · 268 阅读 · 0 评论 -
杭电ACM——1018,Big Number(思维)
数学题,用取对数函数就好。突破口:公式:log(i+1)!=log(i+1)+log(i)!;遍历1~1e7内所有数的阶乘,记录下其对于10的对数log10(i),最终输出的数要+1。代码如下:#include<cstdio>#include<cmath>using namespace std;double f[2500001]; //需要注意,不能直接定...原创 2019-03-17 13:49:59 · 301 阅读 · 0 评论 -
北大ACM——2229,Sumsets(DP或思维)
题意:给定一个数N,要求出用2的次幂组成的等式的和等于N,输出有多少个符合条件的等式。如7,输出6:1+1+1+1+1+1+11+1+1+1+1+21+1+1+2+21+1+1+41+2+2+21+2+4限制条件:1&lt;=N&lt;=1000000,结果对1e9取余。这道题可以dp来做。设置一个二维数组dp[i,j],以及辅助数组c[i],c[i]表示2i。状态:dp[...原创 2019-03-15 15:27:29 · 217 阅读 · 0 评论 -
CodeForces 1087B Div Times Mod(思维)
题意:输入两个正整数n,k,1&lt;=n&lt;=1e6,2&lt;=k&lt;=1e3,求出一个整数x,使得(x/k)*(x%k)=n,有多个x存在时,输出最小的那一个。思路:设置一层循坏,遍历1~k-1所有满足条件的余数i,x=k*(n/i)+i,将x记录入一个数组中,循坏结束后,数组最后一个元素即为所求的最小x。直接上代码吧:#include&lt;cstdio&gt;using...原创 2019-03-07 13:07:51 · 390 阅读 · 0 评论 -
CodeForces 1102A Integer Sequence Dividing(思维)
题意:输入整数n,表示一段连续的1,2,3,…,n的数组,你的任务是将这n个数分为两个A,B集合,要求使|sum(A)-sum(B)|最小。分析:只要算出1~n的总和sum,若sum为奇数,则答案为1,否则,答案为0。直接上代码吧:#include&lt;cstdio&gt;using namespace std;int main(){ long long n,sum;//whil...原创 2019-03-07 13:08:26 · 220 阅读 · 0 评论 -
CodeForces 1101A Minimum Integer(思维)
题意:给出q个问题,每个问题占一行,每行有3个整数l,r,d,求出d的最小倍数x,使得x不在闭区间[l,r]内。思路:d有两种情况:1.d小于l或者d大于r,则x=d;2.d在[l,r]内,则x是d的r/d+1倍,即x=d*(r/d+1);伪代码如下:int q,l,r,d;int ans;scanf(&quot;%d&quot;,&amp;amp;q);while(q–){scanf(&quot;%d%原创 2019-03-07 13:08:02 · 241 阅读 · 0 评论 -
杭电ACM--2036,求任意多边形的面积(思维)
这道题中“每行的开始是一个整数n(3&lt;=n&lt;=100),它表示多边形的边数(当然也是顶点数),然后是按照逆时针顺序给出的n个顶点的坐标(x1, y1, x2, y2… xn, yn)”这么一句话是关键,下面所采用的公式只有按一定顺序输出顶点坐标才能采用。下面就是任意多边形的面积公式(矩阵形式),建议牢记。代码如下:#include&lt;cstdio&gt;#include...原创 2019-03-07 13:10:26 · 324 阅读 · 0 评论