Diary Ⅴ

Well
Time flies
Here come the last week
Are you ready?
Come on !

2019/11/11

1.考试题【√】
2.周末作业【√】
3.模板练习

今天考试
T1 100pts
T2 100pts
T3 10pts
Total:210pts
最高:260pts

T1 签到题
T2 组合数学(打表找规律)
但是正解真的很棒啊
设选出来的数从小到大为 a 1 , a 2 , a 3... , a m a1,a2,a3...,am a1,a2,a3...,am,考虑令𝑏𝑖 = 𝑎𝑖 + 𝑖,我们会发现,b中全是偶数并且两两互不相同,一个b唯一对应一个a那么问题等价于从1到n+m中选择m个偶数的方案数这个显然就是从1到⌊n+m2⌋中选m个数

T3 线段树
emmm……本来也想到了qn的做法,但是没有处理好。最后直接交了一个qn2logn的,拿了10pts
改了一发暴力
其实不需要像我之前那样把每个区间取出来,直接在线段树上做,就可以计算父亲对它的影响了

WOJ#4814学园祭的乐队
一拿到题就jio得这是个dp,结果lsr说我还是太naive了
数据范围那么大1e6,怎么可能是dp
考虑计算每个1的贡献(也就是有多少的概率会在当前位置停下)
发现最后的染色方案(也就是换弦)一定是一个排列, p i p_i pi表示 i i i p i p_i pi这个位置被换了
相当于就是求有多少个排列
考虑一个排列 p 如果要在第 k 个位置上的 1 结束,那么 pk ≥ k,且对于之前所有位
置是 1 的位置 i, 要满足 pi < i,从左到右考虑每一个为 1 的位置。
设 ai 为第 i 个 1 的出现位置,在第 k 个 1 处结束的合法的排列的方案数就是 ( n − k ) ! ( n − a k + 1 ) ∏ i = 1 k − 1 ( a i − i ) (n-k)!(n-a_k+1)\prod_{i=1}^{k-1}(a_i-i) (nk)!(nak+1)i=1k1(aii)

对于最后一个位置,只要能够走到,就需要计算入答案

WOJ#4814 生与死的境界
哇,好一个贪心!
考虑合并的时候新的贡献为 x + 2 ∗ y x+2*y x+2y,对于前面那个数相当于没有改变,只是后面那个数对答案的贡献有变化
一个显然的贪心,对于正数,我们一开始就把它往前合并(这样系数肯定更大)。对于负数,我们就放到最后,等前面的都合并完了,再处理它。
由于我们最多合并n次,所以复杂度是没问题的(一开始把每个数都当做一个独立的块,每次合并最多减少一个块,总共合并n次)
询问离线处理,整块直接调用答案,散块hash计算

最后一周了,我还想做:
NOIP真题做完
模板复习到位
学习自己的博客(既然时间不允许我重做以前的考试题了,那就看看以前的博客)

粗略计划如下:
周二:复习数论模板+靶形数独
周三:复习图论+动态规划
周四:复习字符串+博客
周五:复习数据结构+博客

2019/11/12

WOJ#1846 靶形数独
就是想写搜索

今天考试
T1 40pts
T2 30pts
T3 10pts
Total:80pts
最高:250pts

T1
推了一个小时,没有想到结论。。
lsr的优秀暴力:
首先肯定可以建一颗trie树,然后就考虑在这个树上瞎搞。。思考一下前序遍历、后序遍历、中序遍历,,发现,啊……都不可以。DFS好像可以??为什么嘞?因为DFS遍历下去,相同的前缀一定是单调不减的。题目限制就满足咯~
但这样为什么只是暴力呢
显然Trie树是开不下1e7的
我们把在Trie树上的dfs遍历特殊化,其实按字典序来就可以了
感性理解一下,字典序是比较两个字符串第一个不同的值的大小(越靠近的两个数肯定相似度越高)

T2
接近正解了,只是没有继续优化二分
(我记得我开了-Wall的啊……一定要用!long long输出居然用%d???)
希望在小于O(n)的时间内求出每个 t 需要减去的 x 的数量
写成数学表达形式
Σ ⌈ t i − l e n x ⌉ \Sigma\lceil{\frac{t_i-len}{x}}\rceil Σxtilen
然后你发现这个东西没有办法直接变成 ⌈ t i x ⌉ − ⌈ l e n x ⌉ \lceil\frac{t_i}{x}\rceil-\lceil\frac{len}{x}\rceil xtixlen
怎么办呢
手玩几组数据试一下
发现 ⌈ t i x ⌉ − ⌊ l e n x ⌋ \lceil\frac{t_i}{x}\rceil-\lfloor\frac{len}{x}\rfloor xtixlen是肯定被包含在答案内的,然后就是一个是否 - 1 的判断了
需要-1的就是 满足 t i % x ≤ ( m i d + s ) % x t_i\%x\le (mid+s)\%x ti%x(mid+s)%x
主席树搞一下即可(求某个区间内小于等于某个数的个数)

T3 组合计数
比较简单的一道组合计数。。
结果我入坑dp(明明都知道那是暴力,还没写出来??)

BZOJ#1257 余数之和
发现 k m o d    i = k − ⌊ k i ⌋ ∗ i k\mod i=k-\lfloor\frac{k}{i}\rfloor*i kmodi=kiki(式子的转化!)
然后我们所求的东西就可以提做: n ∗ k − Σ i = 1 n ⌊ k i ⌋ ∗ i n*k-\Sigma_{i=1}^{n}\lfloor\frac{k}{i}\rfloor*i nkΣi=1niki
然后就很好玩了(๑′ᴗ‵๑)
考虑如何快速地求解后半部分
显然 i i i在某一区间范围内时 ⌊ k i ⌋ \lfloor\frac{k}{i}\rfloor ik是一个定值
那我们直接根据这个划分区间(不超过 2 k 2\sqrt k 2k 个区间)
区间为 [ x , k / ( k / x ) ] [x,k/(k/x)] [x,k/(k/x)]
感性理解一下

BZOJ#1053 反素数
搜索(剪枝不会。。)

慢慢发现
题目给出的式子,大多数情况下都是不可计算的。。
需要自己靠脑子转化呀( ̄▽ ̄)~*

POJ#3696 The Luckiest Number
好妙啊!
首先x个8连在一起构成的正整数可以表示为 8 ∗ 1 9 ∗ ( 1 0 x − 1 ) 8*\frac{1}{9}*(10^x-1) 891(10x1)(适当扩展一下,其实8可以换成任意数字)
现在我们需要求满足 L ∣ 8 ∗ 1 9 ∗ ( 1 0 x − 1 ) L|8*\frac{1}{9}*(10^x-1) L891(10x1)的最小x
来一波推导
d = g c d ( L , 8 ) d=gcd(L,8) d=gcd(L,8)
得到: 9 L d ∣ ( 1 0 x − 1 ) \frac{9L}{d}|(10^x-1) d9L(10x1)
也就是说 1 0 x ≡ 1 ( m o d 9 L d ) 10^x \equiv 1(mod\frac{9L}{d}) 10x1(modd9L)
然后根据某种不知名的引理,可以得到
满足 a x ≡ 1 ( m o d    n ) a^x\equiv1(\mod n) ax1(modn)的最小正整数 x 0 x_0 x0是φ(n)的约数(证明见算法竞赛page 146)
注意判断一下快速幂的时候直接相乘会不会爆long long(要用快速乘)

2019/11/13

CH3401 石头游戏 矩阵快速幂
状态矩阵一般都是一维的
所以我们将一开始的石头矩阵,拉成一维的
然后由于每个格子的操作序列是独立的,但每个长度都不超过6
所以在60次操作后,所有的格子的操作序列都会重置为原序列
我们就处理出1~60次的转移矩阵,然后将t=q*60+r

BZOJ#1951 古代猪文
哇,超级大好题(巨经典)
包含了Excrt,Exgcd,Lucas等一系列数论模板操作!
先用欧拉定理对指数取模
然后用中国剩余定理求解大质数的取模操作

什么事情都还没做,,,我还没开始复习图论啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!破烂数论!!!!我我我我我我。。。。

现在:
古代猪文。【√】
错误总结。【半√】有点水
图论复习。

2019/11/14

CSP退役前最后一考
T1 100pts
T2 70pts
T3 25pts
Total:195pts
最高:270pts

心态把握还行。主要是部分分给的很足。
虽然11:00才调完T1,但还好稳住了没有慌。尽量做到了仔细地把暴力敲完,希望CSP的时候也可以稳住(姑娘你可以的!)

T1 最短路
跑10个最短路,然后dfs

T2
注意到了叶子结点数<=10,但仍然不会做
主要是链上的情况都不会处理,更不用说将叶子两两组合起来变树为链
对于链上的情况,我们考虑增量构造
当前加入的数如果为u,则u之后的序列一定分为了若干段,每一段的前缀Gcd相同,而我们至多有Log(n)段(考虑每次gcd的变化最少除以2,最多除以log次)
然后就暴力修改合并即可
至于如何把树变成链,由于叶子结点非常的少,我们直接暴力将每个叶子结点作为根

T3
好妙的一个dp啊
f [ i ] [ j ] f[i][j] f[i][j]表示处理了前i个位置,已经分了j个块的方案数
考虑当前的第i个位置
有两种入边,两种出边
一共四种情况

WOJ#4133 小C的序列
增量构造,链表维护相同的一段gcd

caicai 15928837680
考前开-Wall -Wextra 自动保存

下午改题+WOJ#4133 小 C 的序列
复习图论

任务:

  1. 次小生成树【√】
  2. 企鹅棋【√】–>抄std
  3. 观光公交(ldx太棒啦)

最后的任务:
1.数列分块2,3【√】
2.线段树分治【✓】
3.博客复习&字符串的操作&CSP下发文件
4.总结一下

数列分块2
给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,询问区间内小于某个值 x 的元素个数。

因为需要小于某个值x的元素个数,如果块内的元素是有序的,那不就可以直接二分了吗~~

数列分块 3
给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,询问区间内小于某个值 x 的前驱(比其小的最大元素)。

将分块2中的二分稍微变一下即可

博客复习:
1.dp
2.图论
3.Diary

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值