zoukankan      html  css  js  c++  java
  • POI 2018.10.20

    [POI2005]BANK-Cash Dispenser

    有多少个4位字符串是所有操作序列的子串。

    10^4枚举字符串。暴力判断会TLE

    发现,我们就是在每个操作序列中不断找第一个出现的c字符。

    预处理每个位置p的下一个c字符在哪里。nxt[N][10000][10]

    然后O(N*4)判断。

    [POI2012]SQU-Squarks

    设有n个互不相同的正整数{X1,X2,…Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj。现在所有取法共n*(n-1)/2个和,要你求出X1,X2,…Xn。

    3<=n<=300, 每个正整数不超过10^8

    考试题。

    这种没有任何东西的题,一定要枚举固定一些的。

    为了方便比较大小,对和排序。然后对X从小到大考虑。

    发现,一些和是确定的。a1+a2=b1,a1+a3=b2,然后就不能确定a1+a4和a2+a3哪个大。

    枚举a2+a3=bx,然后知道了a1,a2,a3删除b1,b2,bx,剩下最小的是a1+a4,求出a4,然后删掉a1,a2,a3 +a4。

    以此类推。

    不合法:不存在这个和、数字有重复、不是正整数。大概是O(n^3logn)但是可能找几次就挂了,到不了上界。

    突破口:枚举固定一些东西。

    [POI2015]PIE

    记录印章的x点进行匹配。纸上每个x点最多访问两次。.点不会印下去,只会访问一次。复杂度可以保证。

    根据题意模拟即可。

    [POI2008]PER-Permutation

    现在给你一个元素个数为n的多重集的一个排列和m,求这个排列的排名取模m。

    多重集合排列的康拓展开。

    m不一定是质数。

    从左往右扫位置的贡献。

    对于一个位置i,一个比s[i]小的还没有被固定的x,贡献是:(n-i)!/(a1!*...an!)*ax

    a1..an表示,第j个数,固定i前面的位置之后,在i~n中出现的次数。

    理解乘的那个ax就是把ax!消去一个。

    然后对这些做和,乘法分配律,发现第i位的贡献,就是(n-i)!/(a1!*...an!)*(比s[i]小的数的出现次数和)

    (比s[i]小的数的出现次数和)可以用树状数组维护。

    然后每固定一个数,就可以把这个数的出现次数ai-1。

    但是m不一定是质数。m=p1^q1*p2^q2*.....pk^qk

    可以对每个pk,维护(n-i)!/(a1!*...an!)的值(除去所有的质数p),以及分母中p的次数。

    当移动位置i的时候,可以把aj--,对应每个pk中,只要提前预处理(1~300000)对于每个k,=bi*pk^li(bi是除去pk之后),记录bi,bi的逆元,pk的次数li

    然后,aj--,对应分子乘一个aj,把pk次数消一消然后把baj乘上去。

    n-i变成n-i-1,把n-i的逆元乘上去,把pk次数消一消。

    每次用中国剩余定理合并即可。

    复杂度:O(nlnm+nlogn)不包括预处理复杂度

  • 相关阅读:
    力扣----4. 有效的括号(JavaScript, Java实现)
    力扣----3. 无重复字符的最长子串(JavaScript, Java实现)
    力扣----2. 两数相加(JavaScript, Java实现)
    力扣----1. 两数之和(JavaScript, Java实现)
    sql server实现copy data功能的存储过程(公共代码)
    inner join 与 left join 与 right join之间的区别
    redux
    Spring Boot-3 (@PathVariable和@RequestParam)
    小程序 wx.request
    小程序 -- ui布局
  • 原文地址:https://www.cnblogs.com/Miracevin/p/9822464.html
Copyright © 2011-2022 走看看