首页 > 其他分享 >华泰证券FINTECH决赛第二题题解

华泰证券FINTECH决赛第二题题解

时间:2023-07-09 09:00:43浏览次数:32  
标签:决赛 26 FINTECH 题解 pro fast times return mod

被第二题搞得坐牢2个半小时,在最后10分钟才确定推出的求和公式没问题,是除法取模不规范导致求解有偏差,只能说菜是原罪。这里贴一下赛后修改的代码,希望能对列位有些帮助,欢迎巨佬指导。

思路:

  • 分奇偶讨论固定长度下伪回文串的数量,定义长度为\(n\)的伪回文串的数量为\(a_{n}\):

(1)\(n\)为偶数时,\(a_{n} = 26^{\frac{n}{2}}\times\frac{n}{2}\times25\);
(2)\(n\)为奇数时,\(a_{n} = 26\times26^{\frac{n-1}{2}}\times\frac{n-1}{2}\times25\)。

  • 对长度不超过\(n\)的伪回文串的数量求和,得\(S_{m}\)(为方便计算,这里我们定义\(m = \lfloor \frac{n}{2} \rfloor\),并优先考虑\(n\)为奇数的情况):

\[S_{m}=\sum_{k=1}^{m}{26^{k}\times k \times25 + 26\times26^{k}\times k \times25} =\sum_{k=1}^{m}{27\times26^{k}\times k \times25} \]

  • 采用错位相减,化简\(S_{m}\):

\[S_{m} = 27 \times 26^{m+1}\times\left(m-1\right) + \frac{27 \times \left[ 26^{m}\times(25^{2}-1)+26\right]}{25} \]

  • 如果\(n\)为偶数,则在\(S_{m}\)的基础上减去\(26^{m+1}\times k \times 25\)即可。

其他技巧:这题由于\(n\)的数量级很大,需要采用快速幂算法求解\(26^{m}\);同时,\(S_m\)中存在除法,要计算分母关于模的逆元,使用分子与分母逆元相乘再取模,代替除法。

代码:

import sys
from functools import cache

def exgcd(a, b):
    if b == 0:return a, 1, 0
    d, x2, y2 = exgcd(b, a % b)
    x1 = y2
    y1 = (x2 -  (a // b) * y2)

    return d, x1, y1


def solve(n):

    mod = 10**9 + 7
    m = n // 2
    
    add = lambda x, y: (x + y) % mod
    pro = lambda x, y: (x * y) % mod

    @cache
    def fast(m):
        nonlocal mod
        if m == 0:return 1
        elif m == 1:return 26
        elif m % 2 == 0:return pro(fast(m // 2), fast(m // 2)) % mod
        elif m % 2 == 1:return pro(fast(m // 2), fast(m // 2 + 1)) % mod
        
    base1 = fast(m+1)
    base2 = fast(m)
    _, rev, _ = exgcd(25, mod)
    Sm = add(pro(27, pro(base1, m-1)), pro(pro(27, add(pro(base2, 25**2-1), 26)), rev))
    if n % 2 == 0:
        result = add(Sm, -pro(pro(25, pro(26, m)), base2))
    else:
        result = Sm

    return result

for line in sys.stdin:
    n = int(line.split()[0])
    ans = solve(n)
    print(ans)

标签:决赛,26,FINTECH,题解,pro,fast,times,return,mod
From: https://www.cnblogs.com/zl-record/p/17538288.html

相关文章

  • P7112 题解
    题意简述模板题,求一个\(n\timesn(n\le600)\)的方阵的行列式模一个正整数\(p(1\lep\le10^9+7)\)的值(\(p\)不一定是质数)。题目分析这个题的最终代码其实很简单,重点在于过程。说实话,我在做这个题之前也就只知道个行列式的定义,只会暴力硬算。做了这个题才了解了行列式有那......
  • 关于Azure-平台-Redhat-Linux-服务器时间同步的问题解决
    首先说明一下,关于Azure平台中国区,是没有RedhatLinux系统镜像的于是笔者这边是通过在Windows系统 Hyper-V管理器中安装完Redhat8.x操作系统后,最后将系统磁盘转换成转换为VHD格式然后经过一系列操作、最终在Azure平台上形成了自己的并且加固过的RedHatEnterpriseLinuxre......
  • 【题解】 [APIO2007] 动物园
    目录题目链接原题描述题目描述输入格式输出格式样例#1样例输入#1样例输出#1样例#2样例输入#2样例输出#2提示题意概括思路历程1.与环相关2.设计状态代码实现题目链接原题描述[APIO2007]动物园题目描述新建的圆形动物园是亚太地区的骄傲。圆形动物园坐落于太平洋的一个......
  • 洛谷题解——【模板】堆
    题目链接:【模板】堆【模板】堆题目描述给定一个数列,初始为空,请支持下面三种操作:给定一个整数\(x\),请将\(x\)加入到数列中。输出数列中最小的数。删除数列中最小的数(如果有多个数最小,只删除\(1\)个)。输入格式第一行是一个整数,表示操作的次数\(n\)。接下来\(n\)......
  • 并发网络周测题解释版
    并发网络周测题【一】理论篇1.简述OSI七层协议OSI七层协议(OpenSystemsInterconnection)是一种用于计算机网络通信的参考模型。该模型将网络通信过程分解为七个不同的层次,每个层次负责特定的功能和任务,这有助于网络设备和应用程序之间的协作和互操作性。【1】物理层(Physica......
  • CF500C New Year Book Reading 题解
    这一题是一道比较复杂的贪心(对于本蒟蒻来说)假如两本书\(a\)和\(b\),先看\(a\)再看\(b\),那么我们开始的时候就把\(a\)放在上面。这样的话,我们看\(a\)时就不需要搬动\(b\),看\(b\)的时候会搬动\(a\)。而一开始如果把放在上面,看\(a\)的时候需要搬动\(b\),看\(b\)......
  • AtCoder Beginner Contest 308 题解
    https://atcoder.jp/contests/abc308/tasks_printA-NewScheme过水已隐藏。#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_policy.hpp>#include<ext/pb_ds/hash_policy.hpp>usingnamespacestd;u......
  • [HNOI2008] 玩具装箱 题解
    很难得遇到细节题打码5分钟调试两小时感谢游老师送出的1.5h调试,感激(争取每天用我的代码训练老师的该题能力)细节/思路见注释#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;/*本题细节很多!!!1.注意要把‘0’放进去,否则'1'一直弹不出去,导致答案偏大2......
  • 题解 P8648【[蓝桥杯 2017 省 A] 油漆面积】
    怎么题解区全是扫描线,还有个\(O(n^3)\)暴力老哥。为防止误导新人,给个理论上稳过的\(O(n^2)\)解法。二维前缀和可以处理若干次单点加,最后若干次矩形查的问题。将其差分,即可处理若干次矩形加,最后若干次单点查的问题。于是我们使用差分将所有矩形加上,然后做一遍二维前缀和,即......
  • 「NOIP 模拟赛 20230707」T2 - 涂照片 题解
    题目大意原题有一个\(n+1\timesm+1\)的网格。对于每一行\(i\),都要将左侧的一些格子\((i,1),(i,2),\ldots,(i,x)\)涂黑,其中\(x=k\)的概率为\(a_{i,k}\)。同理对于每一列\(j\),都要将上方的一些格子\((1,j),(2,j),\ldots,(x,j)\)涂黑,其中\(x=k\)的概率为\(b_{k,......