2019.3.summary

emmmm,把以前写的2b总结丢上来吧,不过应该也不会有人看QAQ
(注:因为用txt写的,有一些公式打的很随意,放到markdown上公式自动排版,有可能会显示出错误!可在下方留言)

2019.2.24
如石子堆交换这种改变状态的可以尝试看看差分

在取数使满足某一条件最小或最大时可以先假设原来状态,然后表示出取某一个的状态,用作差或作商看在什么情况下更优


2019.2.26
对于最短路问题,题目中说可以有几条边直接免费,这是经典的分层图最短路(如https://www.luogu.org/problemnew/show/P4568 [JLOI2011]飞行路线)
可以设dp[i][j]表示到i这个点,共用了j次免费的机会,在dijkstra里加一个当前用了多少次免费即可
最后的答案不是dp[t][k],是min(dp[t][0…k])


2019.2.27
同余类最短路想明白了,举个例子,比方说就像每次让你判断一个数x能不能表示成给定的数的完全背包的形式,就是先取一个模数m,通常为给定的中的最小值,然后思想就是假设尽量多的
取m,也可以看成每m个分成一块,最后还有x%m不能被表示,因为我们一开始是假设尽量多的都取了m,所以现在我们只要除了m以外的数能表示成km+(x%m)的形式就可以了,当然要判一下
k不能大于x。
这样不就转化成了%m的类的了嘛,做最短路,t向(t+a[i])%m连边,dis[i]表示能表示出的km+i最小的k,只要它<=x就有解
done


2019.3.1
对于全局的一种规划,比方说一种调度,交换,可以尝试网络流模型。日后再填坑

UVA11613 Acme Corporation
这类题目要拆点,很经典。就是当一个点转移出现与题意不符时。比方说这道题,必须把每个月拆成两个点,一个表示生产,一个表示卖。
因为生产的可能要留着接下来e个月卖,如果只有一个点的话,往后连边,那所有的点就都联通起来了,有可能就超过了k个月才买


1011 [HNOI2008]遥远的行星
2019.3.3
ZROI:
给你若干个a,让你求不同k/a的个数(k<a)(分数值)
考虑把所有a约分以后,设分母为d,则最简真分数有phi(d)个,所以只需枚举d,看是否为某一个a的约数,然后加上phi(d)就行了

对于这种一看就很phi的问题,可以往约分、phi计数上凑

Trick:一般对于一个数,一个一个枚举它的因数(就是把它分解掉)往往不够快速,可以枚举一个数,把它的倍数里存上这个数

给你若干个数a,让你求恰好有k个值为a/b(整除)相同的最小的b
Tips:a/b的个数有O(sqrt(a))个,显然吧

对于本题,可以先统计出对于每个数a,a/b不同的最小的b,这个小Trick可以用b=a/(a/b)+1来跳吧
然后排序去个重,然后枚举每个b,暴力看a/b相同的个数
时间复杂度O(sqrt(MAXA)*n)
只想到普通暴力,这类问题很难想到其他方法,就只能暴力优化,可以想到减少重复计算,对于一些b,a/b的值相同的被重复计算,可以用如上“取使a/b不同的b的最小值”来跳掉


2019.3.4
对于插头dp这样转移可能要考虑条件比较多的问题,一定要在纸上列出


2019.3.5
BZOJ1003: [ZJOI2006]物流运输
一开始以为要拆点,把每个点拆成n个点,分别表示n天能不能通过,然后可以的话就连边,然后费用流,YY了一下,感觉应该能做吧,以后再填坑吧(咕咕咕)
然后正解明显要简单一些,要多做一些dp题了,感觉dp很不熟练蛤
个人认为本题精辟在于cost函数的设计,cost(i,j)表示i到j天都跑同一条路,最短是多少,这样转移就很简单了吧(枚举最后一次换路)

BZOJ1004: [HNOI2008]Cards
首先一眼群论吧,Burnside引理,但是不能直接polya,因为每种颜色有限制,这很好办吧,先暴力拆一下循环,然后背包看一下能分配的方案数,很显然,这就是不动点的个数,
但是坑点:就是不使用任一种置换变换,也要做一次,最后的置换个数也是m+1,因为不变换也是一种置换QAQ。
一般群论的题都要想一想这个坑点QAQ

~~晚安


2019.3.6
部分无根树问题可以考虑转prufer序列,它两是一一对应的关系,比方说无根树计数,实际上就是计算满足条件的prufer序列个数
例:
BZOJ1005: [HNOI2008]明明的烦恼
当成一个prufer序列,则每一个度为x的点会在prufer序列中出现x-1次(这个可以分这个点是不是最后剩的那两个点讨论一下就出来了)
然后不就是组合数啥的了QAQ
upd.高精度除法太麻烦,由于方案数一定是一个整数,可以先分解质因数在运算

BZOJ1006: [HNOI2008]神奇的国度
问题实质:给你一个无向图,用最少的颜色染色,使得相连接的两个点颜色不同
第一眼感觉像网络流,编不下去了……QAQ这是一道cdq的一道论文题23333,
叫最大势算法,就是说每个点先给他一个顶标0,然后每次取顶标最大的一个去掉,然后把与他相连的点顶标加一,然后出现过的顶标种数就是答案
https://blog.csdn.net/qq_35205305/article/details/51823348 代码真的很巧妙啊
最近感觉都没什么码力了鸭QAQ

BZOJ1007: [HNOI2008]水平可见直线
第一次做计算几何,要么全场AK,要么全场不会,显然这是一道全场都会的题吧QAQ
显然能看见的应该是一个类似下凸壳一样的东西,按斜率排个序,栈维护一下就可以了吧

BZOJ1008: [HNOI2008]越狱
肯定是用总的方案数-不能越狱的方案数好算鸭
总的方案数很显然mn,不能越狱的方案数m*(m-1)(n-1),就是每个人我们不要同时考虑它和两边的人相不相同,只考虑和左边,第一个人有m种,因为接下来n-1个人只需保证和左边相同
所以是那玩意,然后快速幂不就行了嘛QAQ


2019.3.7
BZOJ1009: [HNOI2008]GT考试
第一眼觉得是组合题QAQ
f[i][j]前i个字符,i-j+1~i都和那个玩意匹配的方案数,然后可以用类似kmp的适配方法转移
n 1e9,结果……要矩乘优化……,这很好理解吧,每一个f[i][j]都要从f[i-1][]转移来的,而且只要失配的一样(j一样),那么转移要乘的系数也就一样。
所以我们可以kmp一次以后构建转移矩阵
done
upd.主要能矩乘的原因是因为这是计数问题,然后从f[i][]只能统计入f[i+1][],且只要失配的个数一样,接下来转移要乘的系数也一样

md,我真是zz,明天一定要学会cdq分治了,周六的时候把主席树看掉


2019.3.8
在考虑分治鸭这类的时候,一定要假设递归时已经把两半给完成不用考虑了,总是在这一块欠缺


2019.3.9
cdq分治懂了,就是先按住一维排好序,然后在分成左右两部分递归分治,然后就只用统计左半对右半的影响就行了,这个可以用类似归并排序的方法往树状数组里统计……
最后再把这个序列变成有序的,因为这个序列已经处理完,接下来要处理的跟本序列内部的相对顺序没关系了

BZOJ1011:[HNOI2008]遥远的行星
这道题是近似……有点瞎搞,就是当i比较小的时候暴力,大的时候因为分母最小是i-1,最大是i-Ai,因为Ai很小很小,所以i当很大时更是相对小到可怜,所以可以把所有分母变成
(i-A*i)/2直接算

BZOJ1012: [JSOI2008]最大数maxnumber
只想到线段树,当然也可以,但是有点麻烦了,可以用单调栈,因为后面的一进来,如果前面有比他小的,那么前面的就没有用了,所以可以用单调栈记录下标,然后lower_bound就好了

BZOJ1013: [JSOI2008]球形空间产生器sphere
首先看到n+1个方程n个数就应该有点想法,因为都是完全平方公式,把2~n+1个方程和分别第一个方程做差就变成了n个方程,n个未知数的一次方程,高斯消元即可

BZOJ1014: [JSOI2008]火星人prefix
splay裸题但我还是给写萎了……每个点维护他这颗子树所表示的子串的hash值,然后就是splay了
Tips.前后要前后要多加两个点,因为在截取子串的时候会用到i-1和j+1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值