ACM-ICPC 2019上海站预赛题解

打了预赛,感觉自己被各位dalao爆锤了
由于水平过低,改不了所有题,所以只是部分题解QWQ
E题:
给你整数n,m
求有多少种长度为n的整数序列
里面每个数都属于1~m
且1~m的每个偶数出现偶数次
答案对 1 0 9 + 7 10^9+7 109+7取模
n ⩽ 1 0 1 8 n\leqslant 10^18 n1018
m ⩽ 2 ∗ 1 0 5 m\leqslant 2*10^5 m2105
这道题啊,是我成功做出的第一道生成函数的题目
e x = ∑ i x i i ! e^x=\sum_{i}\frac{x^i}{i!} ex=ii!xi
于是 e x + e − x 2 = ∑ i   m o d   2 = 0 x i i ! \frac{e^x+e^{-x}}{2}=\sum_{i\ mod\ 2=0}\frac{x^i}{i!} 2ex+ex=i mod 2=0i!xi
那么,当 m = 2 k m=2k m=2k
A n s = n ! [ x n ] ( e x ) k ∗ ( e x + e − x 2 ) k Ans=n![x^n](e^x)^k*(\frac{e^x+e^{-x}}{2})^k Ans=n![xn](ex)k(2ex+ex)k
于是二项式展开统计一下答案即可
m为奇数类似

H题:
双端队列
每次插入或删除一个1616的01矩阵
然后操作后查询当前矩阵的乘积
蛮好玩的
操 作 数 ⩽ 5 ∗ 1 0 4 操作数\leqslant 5*10^4 5104
首先两个01矩阵的乘积可以通过压位在16
16的时间内算出来
但,后面我们要怎么做呢…
萌新不会了…
然后scb大佬教会了我一个双端队列的套路
维护两个栈
插入插在第二个栈,删除在第一个栈
当第一个栈没东西时
考虑将第二个栈中的东西重构
把第二个栈前一半的东西放到第一个栈
每个元素会“迁徙”一次,这一次对应着"两次"(对半分,stack2也要重构)
放在这道题里面发现很合适

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值