<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SSH_oj的博客]]></title><description><![CDATA[四年OI，一朝退役]]></description><link>https://blog.csdn.net/SSH_oj</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; SSH_oj]]></copyright><item><title><![CDATA[【题解】洛谷2831[NOIP2016] 愤怒的小鸟]]></title><link>https://blog.csdn.net/SSH_oj/article/details/96913207</link><guid>https://blog.csdn.net/SSH_oj/article/details/96913207</guid><author>SSH_oj</author><pubDate>Mon, 22 Jul 2019 23:17:31 +0800</pubDate><description><![CDATA[拿到题目就知道肯定是道状压（n&lt;=18,T&lt;=5），直接能够推出正解复杂度为  O(2n×n)O(2^n\times n )O(2n×n) ，这个想必不用多说了吧。。。我们直接进入正题——

我们知道，确定一条抛物线需要三个点（数学部分在后面）。所以朴素的暴力做法是：枚举每一个猪的集合 SSS ，代表这个集合里的猪已经全部被击杀，再枚举两只活着的猪和原点组成一条抛物线。当然我们在这里还...]]></description><category></category></item><item><title><![CDATA[模板大全]]></title><link>https://blog.csdn.net/SSH_oj/article/details/87446348</link><guid>https://blog.csdn.net/SSH_oj/article/details/87446348</guid><author>SSH_oj</author><pubDate>Sat, 16 Feb 2019 13:56:59 +0800</pubDate><description><![CDATA[模板整理 1
自己整理的模板，能力有限只有这么多：
&amp;amp;amp;gt;&amp;amp;amp;gt; 数学专题
exgcd
#include&amp;amp;amp;lt;iostream&amp;amp;amp;gt;
using namespace std;
int ex_gcd(int a,int b,int &amp;amp;amp;amp;x,int &amp;amp;amp;amp;y)
{
	if(b==0)
	{
		x=1,y=0;
		return ]]></description><category></category></item><item><title><![CDATA[【题解】洛谷2081 [NOI2012]迷失游乐园]]></title><link>https://blog.csdn.net/SSH_oj/article/details/86809680</link><guid>https://blog.csdn.net/SSH_oj/article/details/86809680</guid><author>SSH_oj</author><pubDate>Sat, 09 Feb 2019 14:00:28 +0800</pubDate><description><![CDATA[题外话
这道题很久之前听教练讲过，当时觉得太麻烦就没写，后来拾起来的时候就发现自己不会了 QwQ  （可能是因为我太菜了吧） ，于是怒肝了两个下午把它弄了出来，中间还出了一次大锅，所以留个博客以作纪念吧

题面
题面异常简单，就是求一颗基环树上的任意一点往某个方向走到头的路径期望长度。这个一看就是要用某种类似treeDPtreeDPtreeDP 的方法处理的（但是我一开始没看出来），所以我们可以先...]]></description><category></category></item><item><title><![CDATA[【题解】洛谷3285方伯伯的OJ （SCOI2014）]]></title><link>https://blog.csdn.net/SSH_oj/article/details/83930666</link><guid>https://blog.csdn.net/SSH_oj/article/details/83930666</guid><author>SSH_oj</author><pubDate>Sat, 10 Nov 2018 16:33:06 +0800</pubDate><description><![CDATA[不想写 SplaySplaySplay 的请看这里！
首先，先对楼上那位用线段树解决此题的dalao l_h_j致敬——因为这个思路我们是同时想到的，但他只用了一次就搞定了，我却写了足足两个晚上（最后还因为把 202020 写成 272727 调了一个小时）。。。
接下来就是题解了：(华丽的分割线)

在看这个做法之前，请各位神犇先略微参考一下2017年 NOIPNOIPNOIP 的 day2T3...]]></description><category></category></item><item><title><![CDATA[【题解】洛谷1600天天爱跑步（NOIP2016）]]></title><link>https://blog.csdn.net/SSH_oj/article/details/83476085</link><guid>https://blog.csdn.net/SSH_oj/article/details/83476085</guid><author>SSH_oj</author><pubDate>Sun, 28 Oct 2018 17:00:08 +0800</pubDate><description><![CDATA[在这里给大家提供一种非常简单的方法。
我们先来转化一下题面：题目要求我们求每一个点在某个时间能看到的人数，那我们也可以分别计算每一个人对于他跑步的那条路径上的贡献。
那么我们可以发现一个显而易见的事情：这条路经一定由一段上行和一段下行组成。而且有且只有这两条路径。所以我们分开来看这两条路径：

如果这条路径是上行的，那么我们设这个人跑了 TTT 秒，起点深度为 depstdep_{st}depst...]]></description><category></category></item><item><title><![CDATA[【题解】洛谷1314聪明的质监员（NOIP2011）]]></title><link>https://blog.csdn.net/SSH_oj/article/details/83450572</link><guid>https://blog.csdn.net/SSH_oj/article/details/83450572</guid><author>SSH_oj</author><pubDate>Sat, 27 Oct 2018 22:27:46 +0800</pubDate><description><![CDATA[说实话，这题其实应该放到普及+/提高。思路其实就是简单的快速查找（其实你用二分或三分均可）+前缀和。
首先我们分析一下题面的式子，其实 YiY_iYi​ 就等于该区间内大于等于 WWW 的数字数量与大于等于 WWW 的数字之和的乘积。也就是说，我们需要将重量排序后快速查找出一个与 SSS 的答案差距最小的地方。
那么，差距最小？肯定第一个想到的就是三分。所以我们的做法就出来了（下面附上思路）：
s...]]></description><category></category></item><item><title><![CDATA[【题解】Apio2007 动物园]]></title><link>https://blog.csdn.net/SSH_oj/article/details/83189242</link><guid>https://blog.csdn.net/SSH_oj/article/details/83189242</guid><author>SSH_oj</author><pubDate>Fri, 19 Oct 2018 23:11:33 +0800</pubDate><description><![CDATA[首先，仔细观察题面就会发现，数据范围略微偏小。
然后再仔细的观察一下就会发现一个关键性的问题，不难发现 “每个小朋友只能看到五个动物”。这就应该是本题的切入点。
我们先考虑一下如果拆环成链该怎么做。
那么很显然，我们用 dp[i][S]dp[i][S]dp[i][S]来表示当前考虑到了第 iii 个位置，[i−4,i][i-4,i][i−4,i] 这段区间的移除情况是 SSS 的最大答案，dp[i...]]></description><category></category></item><item><title><![CDATA[【模拟赛】8.24模拟赛题解（由ljm同学的博客转载）]]></title><link>https://blog.csdn.net/SSH_oj/article/details/82024929</link><guid>https://blog.csdn.net/SSH_oj/article/details/82024929</guid><author>SSH_oj</author><pubDate>Fri, 24 Aug 2018 20:25:56 +0800</pubDate><description><![CDATA[Day8题解

本次题目来自：agc005c，arc080f，bzoj3319。



T1：豪迈

题意：给定NNN以及一个长度为NNN的数列anan{a_n}，求是否有一棵树满足第iii个点到树上最远的点的距离是aiaia_i。

题解：显然距离最远的两个点是树的直径上的两个端点，那么显然如果最大值的数量小于两个直接输出Impossible。

接着构造出直径，对直径长度分奇偶考虑(设直径长度...]]></description><category></category></item><item><title><![CDATA[【题解】CF758D Ability To Convert]]></title><link>https://blog.csdn.net/SSH_oj/article/details/82011311</link><guid>https://blog.csdn.net/SSH_oj/article/details/82011311</guid><author>SSH_oj</author><pubDate>Fri, 24 Aug 2018 08:49:02 +0800</pubDate><description><![CDATA[这道题本来是可以贪心的，贪心思路楼下也讲过了，不过因为部分细节原因，这道题的贪心我打挂了(惨不忍睹连续 WA 10 次)，所以这道题我还是可怜地打 dp 去了(神犇勿喷)…

言归正传，这道题的区间 dp 思路是这样的：我们先用一个 f[i][j] 表示从第 i 位到第 j 位组成的十进制数是多少。比如对于一个数 1235 来说，f[2][4]=235; 在此基础上，dp[i][j] 表示从第 i...]]></description><category></category></item><item><title><![CDATA[【题解】 CF417A Elimination]]></title><link>https://blog.csdn.net/SSH_oj/article/details/82011122</link><guid>https://blog.csdn.net/SSH_oj/article/details/82011122</guid><author>SSH_oj</author><pubDate>Fri, 24 Aug 2018 08:30:15 +0800</pubDate><description><![CDATA[这道题真心是特别特别水的，就一 n=2 的完全背包。

我们分析一下题意(我当初看了三遍居然把题都没看懂QAQ)：就是有两种比赛，第一种花费 c 道题，晋级 n 个人，第二种花费 d 道题，晋级 1 个人；并且可以直接晋级的人数&amp;lt;=k。那么想都不用想，直接转移就行了：dp[i]=min(dp[i],dp[i-n]+c){i&amp;gt;=n};  dp[i]=min(dp[i],dp[i-1]+d...]]></description><category></category></item><item><title><![CDATA[【题解】 CF730J Bottles]]></title><link>https://blog.csdn.net/SSH_oj/article/details/82011106</link><guid>https://blog.csdn.net/SSH_oj/article/details/82011106</guid><author>SSH_oj</author><pubDate>Fri, 24 Aug 2018 08:28:30 +0800</pubDate><description><![CDATA[这道题的思路其实就是转化题意+01背包。

首先 k 应该是最好想的，随便乱搞都能求出来(自己想一想，肯定能想出来)。这里就提醒一句：按照容积从大到小排个序，之后暴力往前倒水就行了。

其次，倒来倒去，t 实际上就是移动了的部分的总体积和，t 最小就意味着没有移动的部分体积最大。那么 t 就完全可以用01背包求出来了。dp[i][j] 表示当前选了 i 个瓶子，总容积为 j 时的最小总体积和。那么...]]></description><category></category></item><item><title><![CDATA[【题解】 CF550C Divisibility by Eight]]></title><link>https://blog.csdn.net/SSH_oj/article/details/82011097</link><guid>https://blog.csdn.net/SSH_oj/article/details/82011097</guid><author>SSH_oj</author><pubDate>Fri, 24 Aug 2018 08:27:27 +0800</pubDate><description><![CDATA[这道题的思路其实很简单，先用特判处理掉数字中有 0 或者有 8 的情况（也就是直接输出 0 或8），然后剩下的暴力判断即可。。。

那暴力如何去判断呢？我们先来注意一个性质，能被 8 整除的数的后三位一定能被 8 整除。因为本题要求输出任意解，所以只需判断三位数之内 8 的倍数是否在这个数字里面即可。

那么我们用 s[i] 和 e[i] 来记录 i 最先出现和最后出现的位置，然后对于 8~992...]]></description><category></category></item><item><title><![CDATA[【题解】CF490E Restoring Increasing Sequence]]></title><link>https://blog.csdn.net/SSH_oj/article/details/82011090</link><guid>https://blog.csdn.net/SSH_oj/article/details/82011090</guid><author>SSH_oj</author><pubDate>Fri, 24 Aug 2018 08:26:18 +0800</pubDate><description><![CDATA[这道题其实就是一道代码能力神题，其实说是贪心也没错，不过暴力就能过。说到暴力，大家想到的肯定有很多思路，什么从后往前扫一遍然后逐个判断啊，什么**_蛇皮_**搜索每一个问号啊。。。其实这些方法有很多优化优化说不定就能过，不过我采用的是一种写政治作业时想出来的玄学算法，打了 30 分钟就过了，这个算法具体思路如下：


首先，我们先看当前要构造的第 i 个数字的长度和上一个数字的长度。

如果 s[...]]></description><category></category></item><item><title><![CDATA[【题解】洛谷 2704炮兵阵地（NOI2001）]]></title><link>https://blog.csdn.net/SSH_oj/article/details/81951794</link><guid>https://blog.csdn.net/SSH_oj/article/details/81951794</guid><author>SSH_oj</author><pubDate>Wed, 22 Aug 2018 21:54:27 +0800</pubDate><description><![CDATA[这道题是一道状压 dp 的特别毒瘤的基础题(虽然我打了整整一个早上)，但是因为每一个炮兵都会影响到之后的两行的放置，所以用状压去压两行，按行处理每一行的情况即可。每一行放置的时候也很简单，只需考虑这个位置前两行有没有放置炮兵以及这个位置是不是山丘即可。

那么首先，dp 方程可以很快推出来，dp[L][S][i]表示当前状态是 S，上一行的状态是 L，当前考虑到了第 i 行：

dp[L][S][...]]></description><category></category></item><item><title><![CDATA[【题解】codevs2800 送外卖]]></title><link>https://blog.csdn.net/SSH_oj/article/details/81951765</link><guid>https://blog.csdn.net/SSH_oj/article/details/81951765</guid><author>SSH_oj</author><pubDate>Wed, 22 Aug 2018 21:53:01 +0800</pubDate><description><![CDATA[这道题就是一个状压 dp 的模板题，用 dp[i][k] 表示当前位置在 i ，当前状态为 k(一个二进制数，1 表示这个地方走过了，0表示没走过) 的最小总路程。

首先肯定要先做一遍 floyd，然后进行简单的转移就行了：dp[i][now]=min(dp[i][now],min(dp[j][now],dp[j][now-(1&amp;lt;

#include&amp;lt;iostream&amp;gt;
#in...]]></description><category></category></item><item><title><![CDATA[【题解】CF1000C Covered Points Count]]></title><link>https://blog.csdn.net/SSH_oj/article/details/81951732</link><guid>https://blog.csdn.net/SSH_oj/article/details/81951732</guid><author>SSH_oj</author><pubDate>Wed, 22 Aug 2018 21:50:37 +0800</pubDate><description><![CDATA[我在做这道题时，乍一看，诶，这不是一个前缀和扫一遍吗？于是我就非常愉快的打了一遍。。。然后就 GG 了。

RE 完之后，我再去看了一遍数据范围 – WOC，为什么 l，r 是 1e18？好吧，那这道题还没有想象中的那么水。。。

不过很快大家就能注意到：n 只有 20 万。这说明了什么呢？说明前缀和改变的节点最多只有 40 万个。那么我们把这些节点存起来再一排序，然后扫一遍不就得了？

那么我们...]]></description><category></category></item><item><title><![CDATA[【题解】Zoj3547 The Boss on Mars]]></title><link>https://blog.csdn.net/SSH_oj/article/details/81951691</link><guid>https://blog.csdn.net/SSH_oj/article/details/81951691</guid><author>SSH_oj</author><pubDate>Wed, 22 Aug 2018 21:47:25 +0800</pubDate><description><![CDATA[这道题题意很简单，就是每次给你一个 n，让你求所有小于 n 且与 n 互质的数的四次方之和。

好吧，这题看着好像不是很难耶。。。然后我就看到了 n&amp;lt;=1088^8,t&amp;lt;=100。。。怎么还是多组数据啊QwQ

那这道题该怎么解呢？首先肯定有很多同学想到了一个东西：分解质因数。但是看上去好像又没什么卵用，因为当 n 是一个质数的时候，小于它的所有数都与它互质，你的复杂度一点没变。

那...]]></description><category></category></item><item><title><![CDATA[【模拟赛】8.22模拟赛T2：金字塔]]></title><link>https://blog.csdn.net/SSH_oj/article/details/81951646</link><guid>https://blog.csdn.net/SSH_oj/article/details/81951646</guid><author>SSH_oj</author><pubDate>Wed, 22 Aug 2018 21:44:07 +0800</pubDate><description><![CDATA[这道题实际上就是让你找出一个给定长宽的矩形，再从里面挖掉一个给定长宽的矩形，使剩下部分的平均值最大。

首先，平均值最大就等于矩形内的总和最大，那么意味着我们要在枚举大矩形位置的时候，在logN~log22^2N的复杂度内计算出挖掉的小矩形内总和的最大值。

如果我们使用二维前缀和来表示小矩形内部总和，那么以 i,j 作为左上角的小矩形内总和应该如下表示： 
S(i,j) = sum[ i+c-1...]]></description><category></category></item><item><title><![CDATA[【模拟赛】8.22模拟赛T3：电脑]]></title><link>https://blog.csdn.net/SSH_oj/article/details/81951295</link><guid>https://blog.csdn.net/SSH_oj/article/details/81951295</guid><author>SSH_oj</author><pubDate>Wed, 22 Aug 2018 21:18:34 +0800</pubDate><description><![CDATA[这道题肯定第一眼都想到了n22^2的暴力，就是dp[i]=max(dp[j-1]+abs(i-j-a[j]))，那么我们可不可以再想的深一点呢？

注意到我们的转移每次都是从前面的状态经过最小的abs(i-j-a[j])转移到了最终状态，也就是说我们的目标就是从dp[0]经过最小的代价‘走’到了dp[n]。那这看上去不是最短路么？ 
emmmmmm…看上去好像是那么回事，不过如果按照 dp 的方式...]]></description><category></category></item><item><title><![CDATA[【模拟赛】8.22模拟赛T1：数列]]></title><link>https://blog.csdn.net/SSH_oj/article/details/81950074</link><guid>https://blog.csdn.net/SSH_oj/article/details/81950074</guid><author>SSH_oj</author><pubDate>Wed, 22 Aug 2018 19:58:48 +0800</pubDate><description><![CDATA[这道题其实比较难想，但是想出来后很好写

我们先来看一个给出的数对 bii_i，cii_i，如果我们假设它是正确的，那么就有 bii_i个数字小于  aii_i，有 cii_i个数字大于  aii_i。也就是说，aii_i的位次一定在 bii_i+1~n - cii_i之内。

那么我们就用一个 sum[i][j] 表示有多少个数字一定填在 i~j 这段区间内，然后就可以愉快的 dp 了： 
dp...]]></description><category></category></item></channel></rss>