随笔分类 - 思维
摘要:"题目链接" 【题解】 显然我们得按顺序获得目标t的每个字符。 对于t[0],t[1],t[2],t[3]... 我们可以在s中找到这么一个子序列。 显然如果找到尾巴还是没有需要的t[i]。 就得从s[0]开始重新开始顺序找。 (然后答案递增,因为表示要重新开始加一个子序列了) 但是如果这么直接找的
阅读全文
摘要:"题目链接" 【题解】 把0看成是1,把1看成是 1 求一个前缀和。 pre[i] = pre[i 1]+1 得到delta = pre[n] 显然对于每个位置的值pre[i] 再复制一遍s的话。 下一个s的该位置,也即i+n的前缀和显然为pre[i]+delata 那么无限的情况就很显然了。 即p
阅读全文
摘要:"题目链接" 【题解】 双指针。 一开始l=0,r = len 1 然后不断往中间收缩。 如果发现h[l]h[r]同理 一开始想到的是一个nlogn的做法。 先从大到小排个序(按照高度)。 然后顺序枚举i 显然1..i这里面的板子组成的矩形的话,一定是以第i个板子的高度为准的(最小). 那么当前的任
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 其实这道题感觉有点狗。 思路大概是这样 先让所有的点都在1集合中。 然后随便选一个点x,访问它的出度y 显然tag[y]=2 因为和他相连了嘛 然后其他没有和x相连的点显然只能和x在同一个集合中 所以其他1集合的点你会发现你想改也没法改,
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 设最后行分成了x行,列分成了y列。 那么答案就是floor(n/x) floor(n/y) 然后x+y 2=k //即平均分配x行、y列 我们可以枚举floor(n/x)的值 这个值其实就是n整除x 我们现在证明n/x的结果最多只可能有2
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 我们最后要的是一条最长的路径。 这条路径的权值和是所有点的权值和 所有边的权值和且这个值最大。 显然如果我们在某一条边上的累计的权值和=0) 所以如果我们求的是最大的权值和 边权和的话,那么求出来的路径一定不会有中间某个地方走着走着没油的
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 注意只能改变a不能改变b 然后只要让a[i],b[i],a[n i 1],b[n i 1]这4个字符能凑成两对、全都一样就可以了 分类讨论下就好 【代码】 cpp include define ll long long using nam
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 二分最后轮了几圈。 二分之后直接o(N)枚举具体要多少时间即可。 注意爆long long的情况。 可以用对数函数,算出来有多少个0 如果大于17直接缩小点就好。 【代码】 cpp include define ll long long
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 找到出口到每个点的最短距离。 设你到出口的最短距离为temp 那么如果某个人到终点的距离temp,那么他们肯定不可能在某个时刻和你遇到 因为如果可以在某个时刻与你遇到的话,那他可以接下来跟着你走,那么他到终点的距离肯定是和你到终点的距离是
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 我们可以把这个行船的过程分解成两个过程 1.船经过时间t被风吹到了某个地方 2.船用这t时间尝试到达终点(x2,y2) 会发现如果时间t能最终能到达(x2,y2)的话 对于任意的时间t1 t,t1也能到达。 因为对于t后面的时间,比如t+
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 统计叶子节点个数m 把每条和叶子节点相邻的边权设置成s/cnt就可以了 这样答案就是2 s/m(直径最后肯定是从一个叶子节点开始,到另外一个叶子节点结束) 证明: 设dis(i,j)表示节点i和节点j之间的权值和 设a[1],a[2]..
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 第一个人攻击一次需要1/x秒 第二个人攻击一次需要1/y秒 这两个数字显然都是小数。 我们可以二分最后用了多少时间来攻击。 显然这个是有单调性的,攻击时间越多的话,攻击的次数也就越多。 假设二分出来攻击的时间是mid 那么攻击的次数就是
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 如果找到最大的n使得1+2+...+n 【代码】 cpp include define ll long long using namespace std; const int N = 1e5; ll a,b; ll n; int tag[
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 如果这个回文串的左半部分,字母全是一样的。 那么显然不可能再分出来了,因为不管怎么分怎么排列,最后肯定都只能和原串一样。 所以无解 其他情况下,都有解。 可以保证答案是 【代码】 cpp include using namespace s
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 其实就是让你最后这n个数字的和最大。 加上的x没有关系。因为肯定都是加上n个x 所以直接加上就可以了 主要在于如何选取j 显然我们要找到一个位置j. 然后pre[j]+aft[j]的值最大(pre[j]=1+2+3+...+j 1,aft
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 1000以内就有非常多组互质的数了(超过1e5) 所以,直接暴力就行...很快就找完了 (另外一开始头n 1条边找1和2,3...n就好 【代码】 java include define ll long long using namesp
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 火车从1,2,3...n 1的方式绕圈走。(即每次从i走到i+1) 有一些点有货物需要装载,但是每个点只能装上去一个货物。 每个货物都有目标点卸货点(卸货的时候不限量) 问你假设火车起点为s(s=1,2,3...n)时,完成所有点的装货卸货任务需要的最小
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 会发现如果a[i]=a[j] 那么b[i]~b[j]都是相同的,等于b[i] 而b[i]等于b[i 1]+1或者b[i] 有两种可能 所以对于两个相同的a[i]之间的区间。 只要在区间开始的时候乘个2就行。 如果不在任何一起相等的区间里面
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 给你一棵树 但是每个节点只告诉你出度个数 以及所有和它相连的点的异或和. 让你还原这棵树 【题解】 叶子节点的话,他所有节点的异或和就是它那唯一的一个爸爸 因此,弄个拓扑排序,从最下层一直往上面进行拓扑排序,每次找到它的爸爸之后,就将这个儿子删掉.让爸爸
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 我们可以从左到右枚举一轮。 定义一个cost表示这一轮花费的钱数 如果cost+a[i]beforeT cost beforeT/(1+x) x cost x beforeT/(1+x) x cost beforeT/(1/x+1) x
阅读全文

浙公网安备 33010602011771号