<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_46070004的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_46070004</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_46070004]]></copyright><item><title><![CDATA[2021牛客暑期多校训练营10 Diameter Counting]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119779108</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119779108</guid><author>qq_46070004</author><pubDate>Wed, 18 Aug 2021 15:24:43 +0800</pubDate><description><![CDATA[题目

分析
cjb的题解已经很详细了。下面是本人理解。
算法的思想是从一个核心开始往外扩展，用fi,jf_{i,j}fi,j​表示有jjj个叶子的iii标号树的个数。然后加叶子时枚举增加的叶子kkk即可转移到fi+k,kf_{i+k,k}fi+k,k​上了。接着再引入gi,j,kg_{i,j,k}gi,j,k​表示新加入的叶子的序列方案。于是可以知道如何转移了
fi+k,k=fi,j⋅gi,j,k⋅Ci+kif_{i+k,k}=f_{i,j}·g_{i,j,k}·C^{i}_{i+k}fi+k,k​=fi]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营10 Browser Games]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119756208</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119756208</guid><author>qq_46070004</author><pubDate>Tue, 17 Aug 2021 15:31:31 +0800</pubDate><description><![CDATA[题目

分析
听说这题是银川真题限内存版本。
然后不限内存的是建字典树，但是这里不行。于是我们就要找内存更小的算法。
于是我们可以对所有的字符串先进行排序，将序列存在数组idiid_iidi​中，代表第iii个字符串排完序后变成了第idiid_iidi​个字符串。
然后进行搜索。
经过排序我们可以发现，部分前缀相同的字符串已经放在一起了。于是我们可以找到这些部分前缀相同的字符串，在最大的字符串的下标的后一位加一，表示此后多一个确认前缀，然后在这些部分前缀相同的字符串区间里继续寻找之间的不同，加入确认前缀。
]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营9 Incentive Model]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119715088</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119715088</guid><author>qq_46070004</author><pubDate>Sun, 15 Aug 2021 16:24:30 +0800</pubDate><description><![CDATA[题目

分析
原题老长一大篇了，tag:英语阅读，然后翻译后就这么一点。
我们可以设第iii块矿挖出后AAA的股权为SiS_iSi​
于是可以列式：
Si=Si−1+Si−11+w(i−1)w=Si−1⋅1+wi1+(wi−1)=1+wi1+(wi−1)⋅1+(wi−1)1+(wi−2)...⋅1+w1⋅S0=(1+wi)aS_i=S_{i-1}+\frac{S_{i-1}}{1+w(i-1)}w\\=S_{i-1}·\frac{1+wi}{1+(wi-1)}\\=\frac{1+wi}{1+(wi-1)}]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营9 Jam]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119714027</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119714027</guid><author>qq_46070004</author><pubDate>Sun, 15 Aug 2021 15:42:10 +0800</pubDate><description><![CDATA[题目

分析
当jo警即可
从现实中的信号灯中可以不难知道，对于右转来说，是可以时刻保持开启的。然后对于剩下的信号灯，每秒最多可以亮两盏。那么我们可以对这些可以一起亮的路口连边，匹配出最小的花费。
我们设四个路口的直行分别为a1,a2,a3,a4a1,a2,a3,a4a1,a2,a3,a4，设左转分别为b1,b2,b3,b4b1,b2,b3,b4b1,b2,b3,b4。
于是我们可以连出这样的图

对于黄色的边，我们可以发现它们分成了两个互不干扰的矩形。
设矩形为矩形abcd矩形abcd矩形abcd，那么矩]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营8 Tree]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119647776</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119647776</guid><author>qq_46070004</author><pubDate>Thu, 12 Aug 2021 21:00:00 +0800</pubDate><description><![CDATA[题目

分析
我们先找出满足

]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营7 xay loves Floyd]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119513854</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119513854</guid><author>qq_46070004</author><pubDate>Sun, 08 Aug 2021 14:25:40 +0800</pubDate><description><![CDATA[题目

分析
这题目听说出题人是用lowbitlowbitlowbit写的，但是我们可以在题目给的错误的FloydFloydFloyd算法的基础上进行优化。
首先，我们可以先用dijkstradijkstradijkstra算法来算出正确的最短路大小。
然后对题目给的错误的FloydFloydFloyd算法进行剪枝。可以发现，对于点对(u,v)(u,v)(u,v)来说，如果disu,v==infdis_{u,v}==infdisu,v​==inf，那么用题目给的算法做出来的disu,vdis_{u,v}di]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营5 Cheating and Stealing]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119383622</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119383622</guid><author>qq_46070004</author><pubDate>Wed, 04 Aug 2021 15:45:09 +0800</pubDate><description><![CDATA[题目

来骗，来偷袭
分析
这道题让我们求
∑i=1∣S∣fi(S)∗(∣S∣+1)i−1mod998244353\sum_{i=1}^{|S|}f_i(S)*(|S|+1)^{i-1}mod 998244353i=1∑∣S∣​fi​(S)∗(∣S∣+1)i−1mod998244353
的值。
然后一看数据范围，n≤106n\le 10^6n≤106。于是我们就要在平均最多O(logO(logO(log n)n)n)的时间里把这个fi(S)f_i(S)fi​(S)给算完。
那么，这个函数该怎么算呢。
我们可]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营6 Defend Your Country]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119358318</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119358318</guid><author>qq_46070004</author><pubDate>Tue, 03 Aug 2021 20:58:45 +0800</pubDate><description><![CDATA[题目

分析
对于这道题，我们可以发现，当一张图中的点数为偶数时，ansansans就是权值和

]]></description><category></category></item><item><title><![CDATA[Hopping Rabbit]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119350862</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119350862</guid><author>qq_46070004</author><pubDate>Tue, 03 Aug 2021 18:34:06 +0800</pubDate><description><![CDATA[题目

分析
这题用扫描线。
因为兔子最多一次跳ddd的距离，那么对于一个陷阱的横纵坐标来说，将它改成对于ddd同余的数对于答案来说没有区别。
所以，我们可以将陷阱转移到同一个单位方格中，其中方格的单位边长为ddd。
然后在这个单位方格中进行扫描线处理，只要有一个空位（即扫描到有一部分线没被陷阱覆盖），即可输出。
#include&lt;bits/stdc++.h&gt;
#define ll long long
using namespace std;
ll n,d;
vector&lt;pair&lt;]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营4 Convolution]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119188536</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119188536</guid><author>qq_46070004</author><pubDate>Wed, 28 Jul 2021 20:21:18 +0800</pubDate><description><![CDATA[题目

分析
又是这种分析贼难代码贼短的题目
分析完题目后可以得到：
x⊗y=xygcd(x,y)2x\otimes y=\frac{xy}{gcd(x,y)^2}x⊗y=gcd(x,y)2xy​
那么
bi=∑1≤j,k≤n,jkgcd(j,k)2=iajkcb_i=\sum_{1\le j,k\le n,\frac{jk}{gcd(j,k)^2}=i}a_jk^cbi​=1≤j,k≤n,gcd(j,k)2jk​=i∑​aj​kc
但是，直接枚举jjj和kkk会超时。于是可以设g=gcd(j,k),x=j]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营3 Minimum grid]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119183349</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119183349</guid><author>qq_46070004</author><pubDate>Wed, 28 Jul 2021 16:57:17 +0800</pubDate><description><![CDATA[题目

分析
比赛时得知这是二分图匹配，然后看了看题目，你管这叫二分图匹配？不是构造吗？
然后补题时发现这真的是二分图匹配
既然是二分图，就要想想这图是怎么建的。然后发现，对于某个行和列最大值相同的格子，只有那些格子可以填这个最大值。把那些格子取出来，行列序号当点连边，跑完二分图匹配，少去的那些点就是可以填000的那些点。求和即可。
#include&lt;bits/stdc++.h&gt;
#define ll long long
using namespace std;
ll b[4021],c[402]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营4 Sample Game]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119152414</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119152414</guid><author>qq_46070004</author><pubDate>Wed, 28 Jul 2021 15:10:41 +0800</pubDate><description><![CDATA[题目

大意就是喝汽水，每种汽水的中奖概率为PiP_iPi​，而中了序号大的汽水后不能中序号小的汽水，求喝到汽水的期望数。
分析
先看题目发现有分数和模。费马小定理（快速幂）先打好。
ll fx(ll x,ll y)
{
	ll xx=1;
	while(y)
	{
		if (y&amp;1) xx=xx*x%mod;
		x=x*x%mod;
		y=y&gt;&gt;1;
	}
	return xx;
}

然后分析题目
要我们求期望的平方，我们可以先单求期望。
我们设现在选了xxx，之后还能选的期望]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营4 Product]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119177326</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119177326</guid><author>qq_46070004</author><pubDate>Wed, 28 Jul 2021 14:46:25 +0800</pubDate><description><![CDATA[题目

分析
分析完题面后，发现题目要我们求的就是
∑∑ai=D,0≤aiD!∏(ai+k)!\sum_{\sum{a_i}=D,0\le a_i}\frac{D!}{\prod (a_i+k)!}∑∑ai​=D,0≤ai​​∏(ai​+k)!D!​
然后发现这个式子和排列组合很像。
原式去掉kkk以后发现
∑∑ai=D,0≤aiD!∏ai=nD\sum_{\sum{a_i}=D,0\le a_i}\frac{D!}{\prod a_i}=n^D∑∑ai​=D,0≤ai​​∏ai​D!​=nD
于是我们可以]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营3 24dian]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119147998</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119147998</guid><author>qq_46070004</author><pubDate>Tue, 27 Jul 2021 16:58:15 +0800</pubDate><description><![CDATA[题目

分析
看数据，最多就444张牌，暴搜就好了。
方法很多，这里可以先把牌构造出来，然后验证。恶心的是，所有解法都必须出现分数。加个flagflagflag记录一下就好。
#include&lt;bits/stdc++.h&gt;
#define ll long long
using namespace std;
int as[101000][5];
double a[5];
int n,m,ans,fl;
bool check(double x){x-=(int)x;return x&gt;1e-6&]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营4 Tree Xor]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119142281</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119142281</guid><author>qq_46070004</author><pubDate>Tue, 27 Jul 2021 14:31:27 +0800</pubDate><description><![CDATA[题目

分析
从题目中可以看出，相邻节点的异或值是确定的，那么只要一个节点的值确定了，整棵树上节点的值就确定了。于是可以先确定111号节点的值，再判断剩下的合不合法。然后发现对于111号节点，它异或上一个数xxx，相当于整棵树异或上xxx。所以可以先用dfsdfsdfs求出当111号节点等于000时的所有节点值，再求出符合条件的xxx的个数。
于是题目就变成了求符合(ai(a_i(ai​ xorxorxor x)x)x)∈\in∈[li,ri][l_i,r_i][li​,ri​]的xxx的个数。
然后这个问]]></description><category></category></item><item><title><![CDATA[2021牛客暑期多校训练营4 Inverse Pair]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/119116192</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/119116192</guid><author>qq_46070004</author><pubDate>Mon, 26 Jul 2021 20:04:06 +0800</pubDate><description><![CDATA[题目及数据

分析
看到这题目时，第一反应是——先把图建起来。然后很快发现，光建图就1e101e101e10了。于是开始认真想。从建图的方式来看，行和列是分开来的。于是可以想到分开来求然后再合并求出最终的解。
然后看题目要我们求什么，连续子矩阵的最大平均值。因为我们通过行和列分开求的方式，所以这题就变成了求子序列的最大平均值。然后百度，发现有二分的写法，于是抄下来改了改。
	double l=0.0,r=200000.0;
	while(r-l&gt;1e-8)
	{
		double mid=(l+r)/]]></description><category></category></item><item><title><![CDATA[K匹配]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/109343648</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/109343648</guid><author>qq_46070004</author><pubDate>Wed, 28 Oct 2020 21:02:42 +0800</pubDate><description><![CDATA[题目描述

分析
本来以为这题很难，结果是求字符串A有多少个子串包含字符串B。
于是就可以记录字符串A中每个字符串B的开头位置，设共有kkk个，然后记录包含第iii~kkk个字符串B的子串个数。其中字符串匹配的部分用KMP⋅KMP·KMP⋅改。
复杂度O(n)O(n)O(n)?
#include&lt;bits/stdc++.h&gt;
#define ll long long
using namespace std;
char s[10010000],a[10010000],ch;
ll n,m,i,j,]]></description><category></category></item><item><title><![CDATA[2020牛客NOIP赛前集训营-提高组（第二场）gcd]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/109207237</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/109207237</guid><author>qq_46070004</author><pubDate>Wed, 21 Oct 2020 18:50:19 +0800</pubDate><description><![CDATA[题目大意

分析
看到这种题，一般都不会想到暴力算，于是想到把每个f(x)f(x)f(x)打表。
然后看规律，然后发现对于某个质数的正整数次幂的f(x)f(x)f(x)等于这个质数，其他都为111。
然后打表
	for (i=2;i&lt;=m;i++)
	if (!a[i])
	 {
		for (j=i;j&lt;=m;j*=i)
		 a[j]=i;
		for (j=2;j*i&lt;=m;j++)
		 if (!a[j*i]) a[j*i]=1;
	 }

然后输出a[na[na[n~m]m]m]]></description><category></category></item><item><title><![CDATA[2020牛客NOIP赛前集训营-提高组（第二场）include]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/109207012</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/109207012</guid><author>qq_46070004</author><pubDate>Wed, 21 Oct 2020 18:36:53 +0800</pubDate><description><![CDATA[题目大意


分析
因为n∗mn*mn∗m超过了1e101e101e10，所以针对每个输入的xxx一个一个找并不现实。
于是想到打表。
然后由于题目里有&amp;这个东西，于是想到数位DP。
然后寻找转移式，发现
当dp[i]=1dp[i]=1dp[i]=1时,dp[i−(1&lt;&lt;j)]=1(i&gt;=1&lt;&lt;j)dp[i-(1&lt;&lt;j)]=1(i&gt;=1&lt;&lt;j)dp[i−(1&lt;&lt;j)]=1(i&gt;=1&lt;&lt;j)。
于是能写出如下打表]]></description><category></category></item><item><title><![CDATA[夏日祭的灯笼]]></title><link>https://blog.youkuaiyun.com/qq_46070004/article/details/108028255</link><guid>https://blog.youkuaiyun.com/qq_46070004/article/details/108028255</guid><author>qq_46070004</author><pubDate>Sun, 16 Aug 2020 16:49:51 +0800</pubDate><description><![CDATA[题目描述
forever97准备举办一场夏日祭，他邀请了许多参展商，并为每位参展商各准备了一串灯笼。
灯笼串可以表示为一个长度为n的字符串，其中每个字符表示一个小灯笼，共有10种小灯笼，分别用0到9表示。
每家参展商都对灯笼串有一定要求，所有符合第 k 家参展商要求的灯笼串所构成的集合，被称为 S[k] 。S[k] 内的任意元素 s ，必须满足以下要求：
1.若 s 的长度 n=1，则 s 仅包含一个数字 d ，d=k%10；
2.若 s 的长度 n&gt;1 且 n 为偶数，则 s(1,n/2)∈S[k+]]></description><category></category></item></channel></rss>