省选/NOI
chiyankuan
这个作者很懒,什么都没留下…
展开
-
2020.09.19【省选组】模拟
T2:首先有一个结论,对于一个长为n的串,判断len是否合法的一个简便方法就是判断它的前n-len位和后n-len位是否一致,并且len|n。手玩一下可以发现如果前n-len位和后n-len位相同,那么可以通过每len位的相等来推出len是合法的。接着我们就可以通过哈希O(1)判断对于l、r和len是否合法,然后我们只需要提前预处理出1~n的约数,在询问时逐一枚举判断。不过这样会超时,而可以发现如果对于一个不合法的len,len的约数必定也不合法。所以我们可以先设ans=n,然后枚举ans的质因数p,若原创 2020-09-22 19:35:56 · 78 阅读 · 0 评论 -
2020.09.12【省选组】模拟
T1:首先如果这个串本身就不是回文串,那么答案就是1。这题可以通过各种方法发现答案要么是2,要么是-1。而且-1只有xxxxxx,xxxyxxx,xyxyxyxyx这三种情况。(第二种情况的意思是长度为奇数而且最中间的位置为y,其他都为x)这样这题就做完了。T2:网络流。首先建立S和T,中间一列n个点。首先每个点和S有流量为1的边,和T有-1边,表示如果割左边则该点选正,割右边则该点选负。然后对于每一个a|w[x]-w[y]|,我们可以发现如果x和y的正负性不相同则贡献为2a,否则贡献.原创 2020-09-17 21:19:54 · 90 阅读 · 0 评论 -
2020.09.05【省选组】模拟
T1:首先用tarjan求出所有的点双,然后建圆方树。具体的建法是将当前点双的割点作为父亲向一个新建的方点连边,然后方点在想点双中其他点连边。在建好圆方树之后我们就树形dp。设f[i]表示从i的子树到i的最长链的长度。对于每个x,如果x为圆点则像常规一样转移;若x为方点则要处理一下:把当前方点对应的点双中的点拉出来排成一列,然后复制一遍(处理环的情况)。接着我们枚举i、j(i<j),若j-i<=n/2则用f[i]+f[j]+j-i去更新ans。求f[x]类似。至此这道题就做完了。T.原创 2020-09-12 16:11:29 · 83 阅读 · 0 评论 -
2020.06.06【省选A组】模拟
首先这题可以通过推式子(考虑相邻两个位置的优劣情况)发现最优解应该是按照a/t从大到小的顺序来解题的。所以我们可以求出最优解的序列,现在要求的就是c的最大值。但这时我们会发现可能会有多个a/t相同的点,所以我们求出每一道题可能出现的最早和最晚的时间,这两个时间就等于这个点在a/t相同的这一块中排在最前和最后的时间。接下来我们把a从小到大排序,然后二分c,对于一个c,要满足对于每一个i(i<n)都有i的最大b值小于i+1的最小b值。因为如果这个不成立的话就一定会有一种排列顺序使得i和i+1之间出现矛原创 2020-06-06 21:00:30 · 212 阅读 · 0 评论 -
2020.01.16【省选组】模拟
这套比赛目前只改出一题。T1:首先我们发现对于k个关键点构成的一棵树,最有答案一定是2*sum-maxdis,其中sum表示所有边权的和,maxdis表示直径的长度。知道了这个之后我们就可以分两部分算答案。首先计算sum。我们枚举每一条边,然后计算这一条边可能出现在关键树上的方案数。设这条边的一侧有x个关键点,另一侧有y个关键点(显然x+y=m),那么这条边出现在关建树中的方案数就是...原创 2020-01-17 21:52:04 · 1748 阅读 · 0 评论 -
IOI2020第一轮选拔模拟7(莫比乌斯反演)
今天比赛是做的不太好,主要是T1的算法不会。T1:这是一道莫比乌斯反演。 ps:设p=dk这样直接枚举计算有50分。接下来我们把n/p和m/p相同的分一块,把a从小到大排序。每一次新增一个a产生影响的只有a的倍数。用树状数组维护每次查询n、m的时候就直接分块查询就好了,因为最多只有级别块。T2:题解待更新。T3:设,...原创 2019-12-14 19:18:22 · 159 阅读 · 0 评论 -
IOI2020第一轮选拔模拟6
今天的题都比较玄学。T1:首先我们把k个1之间的距离算出来,然后会发现它们一定是n/k或者n/k+1。否则的话如果我们移动了一个1之后,就会出现新的距离,这样就一定不能满足循环同构了。在知道了这个性质之后,我们将n/k记为0,n/k+1记为1。那么我们发现在一个在原串中交换10位置,就相当于将原来距离蔚n/k和n/k+1的变成n/k+1和n/k的,也就是说在新串上交换了10。这样我们...原创 2019-12-14 18:37:26 · 223 阅读 · 0 评论 -
IOI2020第一轮选拔模拟5
今天又是三道难题.T1:题解待更新T2:题解待更新T3:这是一道dp。设dp[i][j]表示用了i种物品构成的体积为j是否可行,其中j用bitset存。那么我们可以把所有物品种类按照v来分类。设s[v][k]表示在体积为v的物品中选出k种物品的最多选出的个数。s[v][k]就等于体积为v的c前k大的c的和。求出了s之后,我们就可以求dp了。先枚举v,再...原创 2019-12-11 20:11:05 · 190 阅读 · 0 评论 -
IOI2020第一轮选拔模拟4(线性基、点分治)
今天的题也很难,目前只改出了两题。T1:这题要用到一个叫线性基的工具。首先我们发现3^b给予我们一个贪心的思路:一定是要优先满足b较大的列。紧接着就有一个做法了:从大到小枚举b,判断计算当前b的最大贡献。如果b有+1而没有-1,那么就判断一下3^b是否可行。有-1而没有+1同理。注意有+1也有-1时两列都为0和两列都为1的情况是同理的,在这种情况下我们可以定义限制为两列异或起来的...原创 2019-12-09 19:25:16 · 177 阅读 · 0 评论 -
IOI2020第一轮选拔模拟3
到杭州学军中学集训的第一天。今天比赛当场只能打暴力,改题也只改了一题。(好难啊!!!)T1:首先我们把x轴上方的点向每一座墙的左右端点连射线,然后将这些射线能合并的合并(意思就是算出每一个x轴上方的点的被遮挡区间)。接着我们计算每一个x轴下方的点的答案。具体做法就是每次都枚举k座墙的左右端点,然后加上经过左端点的在当前点的左侧的射线的数量,减去经过右端点的在当前点的左侧的射线的数...原创 2019-12-09 19:14:27 · 269 阅读 · 0 评论 -
2019.08.10【省选组】模拟
做了三天,终于改完了。这场比赛三道难题,其中两道是码农题。T1:树上倍增即可。我们首先把x和y的中点找出来,然后我们就分清楚了哪些点要到那个终点去。接着我们要求答案。首先我们要预处理出几个数组:dis1[i]、dis2[i]、dis3[i]:从i的后代走到i的最长距离、次长距离和第三长距离up[i][j]:以从i开始往上走2^j步的点为根的子树走到i的最长距离。(注意...原创 2019-08-12 19:58:09 · 164 阅读 · 0 评论 -
2019.08.13【省选组】模拟
今天的题正解还不算太难。T1:网络流。首先我们要求答案最大,那么就是总的减去损失的最大,也就是要求损失的最小(这才符合网络流模型)。那么现在我们来分析损失:若一个a[i]=0,那么我们会损失所有的b[i][j]和b[j][i],而如果一个a[i]=1那么我们会损失一个c[i]的代价。然后我们就构想出了一个图:(忘了画箭头……将就一下吧)对于每一个i、j都这么建,显然是对的。...原创 2019-08-14 16:14:56 · 107 阅读 · 0 评论 -
2019.08.12【省选组】模拟
T1:这题的题意有点难懂。其实题目就是要我们先让所有工人把该学的都学了,然后使得无论工人们在那种选择的情况下都可以让所有机器都有人操作。推一推不难发现:我们把整个二分图分成若干个连通块,所有机器都有人操作的充要条件就是每一个连通块都是一个完全二分图(即左边的每一个点向右边的每一个点都有连边)。那么我们先把一开始的连通块都处理出来,设第i个连通块左边有x[i]个点,右边有y[i]个点,现在问...原创 2019-08-14 15:31:42 · 130 阅读 · 0 评论 -
2019.06.25【NOI2019】模拟(三维前缀和、三维差分、混合图求欧拉回路)
T1:这题可以暴力+优化水过。首先明确一点:ans =sum(各个方案中被选中的点的和)/[1/8*n*(n+1)*m*(m+1)*h*(h+1)]^w。接下来我们的任务就是求sum。而显然sum=sigma(val[i][j][k]*(tot^w-(tot-x)^w))。tot表示所有能选的长方体,x表示这tot个长方体中有几个是包含(i,j,k)的。这条式子的意思其实就是求w次选择长方...原创 2019-06-25 22:04:16 · 1061 阅读 · 0 评论