ACM-ICPC 2019上海站预赛题解

本文分享了竞赛编程中遇到的挑战及解决策略,包括使用生成函数处理复杂组合问题和利用双端队列优化矩阵运算,适合对算法和数据结构感兴趣的读者。

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值