首页 > 其他分享 >2024.10.8 test

2024.10.8 test

时间:2024-10-08 19:11:35浏览次数:1  
标签:2024.10 le 询问 矩阵 排列 test 考虑 收益

nf #34

A

定义两个长度相等的数列相似,当且仅当每个下标对应值在两个数列中的排名相等。
对于一个长 \(n\) 的排列,定义 \(f(A,k)\) 表示有多少长 \(k\) 的排列和 \(A\) 的至少一个子序列相似。
排列 \(A\) 的值是 \(\sum_{k=1}^n [f(A,k)=C_n^k]\)。给出一个排列,有若干位置待定,求值最大且字典序最小的排列。
\(n\le 20\)。

\(f(A,k)=C_n^k\) 的含义是:每个子序列都是两两不相似的,所以能贡献的 \(k\) 一定是 \([n-t,n]\) 的形式。
考虑从 \(k=n-1\) 开始,注意到,合法的排列满足序列中相邻的数值域上不连续。
\(k=n-2\) 的话,序列中不存在相邻且差 \(\le k\) 的,且连续的数位置的差 \(>k\)。
进一步的,这个限制有一点丑,考虑合并成一条式子:\(\forall i\neq j,|p_i-p_j|+|i-j|> k\) 即满足条件。
证明的话从 \(k=n-1\) 开始,相邻的如果也连续,那么删除他们两中一个都是等价的。
进一步,我们删了一个之后再删一个数,还是要满足相邻的不连续,就有了上面的式子。
这个限制非常苛刻,我们考虑直接爆搜通过。

B

有 \(n\) 个物品,有重量 \(w\) 和价值 \(v\),\(q\) 次询问,背包大小为 \(m\),对于每次询问,你不断选择物品直到背包正好装满,求最大收益和达成最大收益的方案数,即物品选择的顺序需要被考虑。
\(n,w,q\le 100,m\le 10^9\)。

由于 \(w\) 比较小,所以可以被转移的不多,而 \(m\) 很大,所以我们考虑矩阵快速幂。
设 \(f_i,g_i\) 表示当前选了 \(i\) 重量,方案数以及最大收益的值,转移枚举上一个选了什么。
但是,我们怎么知道哪些转移是最大收益的呢?考虑矩阵里直接记一个双元组 \((f,g)\)。
对于双元组我们可以定义新运算,设 \((f_1,g_1)+(f_2,g_2)=([g_1\ge g_2]\cdot f_1+[g_2\ge g_1]\cdot f_2,\max(g_1,g_2))\)。
\((f_1,g_1)\times (f_2,g_2)=(f_1\times f_2,g_1+g_2)\),而矩乘就是 \(C_{i,j}=\sum_{k=1}^n A_{i,k}*B_{i,k}\)。
其实,只需要把矩阵优化理解为倍增优化 dp 即可。
最后,我们是向量乘矩阵,把所有 \(k\) 的 \(T^k\) 预处理出来,复杂度是 \(w^3\log m+w^2n\log m\)。

C

有 \(n\) 个位置,\(q\) 次询问,每次给出一个起始点,然后每次可以向左或向右扩展 \(1\)。
有 \(m\) 次收益,诸如若第 \(x\) 次拓展是 \(p\),则可以获得 \(w\) 的收益。问最大收益。
\(n\le 10^9,m,q\le 10^9\)。

收益的形式很丑陋,根据 \(s,p\) 的关系写成两种区间:\([p-x+1,p],[p,p+x-1]\) 代表当前区间形式。
那么我们要选出若干包含关系的区间,且 \(w\) 的和最大。
如果是单次询问,那么可以把左端点排序了,右端点相当于一个 LIS 的形式。
多次询问的话考虑把所有区间都并起来算,相同 \(p\) 的一对区间事实上最多选一个所以互不影响。
对于每个询问呢,我们考虑扫描线,如果 \(f_i\) 表示以 \(i\) 结尾的答案,然后相当于求若干 \(f_i\) 最大值。
这个容易计算的。
这题的话呢相当于转化为 LIS 模型。

标签:2024.10,le,询问,矩阵,排列,test,考虑,收益
From: https://www.cnblogs.com/Simon-Gao/p/18452311

相关文章

  • 【2024.10.07】责任感
    终于还是做出了重要的决定,在厦门岛内买了房为什么选择这个时候买房呢一是最重要是因为一些宏观的政策改变了吧,落户政策改变了,只要有房就能落户,落户马上就能给孩子读书我和妹妹正好有年龄代差,现在买的话,后年交房后,妹妹就能在厦读书了等妹妹用完学位后,我如果这时候有孩子了,也正......
  • キーエンスプログラミングコンテスト2024(AtCoder Beginner Contest 374)
    A.Takahashisan2判断一个字符串是否以san结尾usingnamespacereader;intmain(){strings;cin>>s;if(s[s.length()-1]=='n'ands[s.length()-2]=='a'ands[s.length()-3]=='s'){cout<<"Yes";......
  • [论文阅读报告] Fast 2-Approximate All-Pairs Shortest Paths, SODA '24
    本篇文章介绍\(\tildeO(n^{2.032})\)的无向无权图全源最短路stretch2近似算法和\(\tildeO(n^{\frac94})\)的组合算法,以及\(\tildeO(n^{2.214}(1/\epsilon)^{O(1)}\logW)\)的非负整数边权stretch\((2+\epsilon)\)近似算法。其中\((1/\epsilon)^{O(1)}\)......
  • 2024.10.7
    您提供的代码是用于管理token的一组函数,适用于使用uni-app开发的项目。以下是对每个函数的解释:代码分析constTokenKey='App-Token'//获取TokenexportfunctiongetToken(){returnuni.getStorageSync(TokenKey)//从本地存储中获取token}//设置Tokenexp......
  • AtCoder Beginner Contest 355
    ABC355A-WhoAtetheCake?题目传送门代码(签到题)#include<cstdio>#include<cctype>#include<cstring>#include<algorithm>usingnamespacestd;intiut(){intans=0,f=1;charc=getchar();while(!isdigit(c))f=(c=='-'......
  • 2024.10.05 刷题记录
    2024.10.05刷题记录P7597「EZEC-8」猜树加强版不难发现\(u\)的儿子的条件是在\(u\)的子树内且深度比\(u\)恰好大\(1\)。每次询问子树内的所有节点深度或许可以解决此题,但询问次数达到了\(n^2\)。在\(u\)的子树内,如果知道所属其他儿子的子树的节点,知道属于\(u\)......
  • AtCoder Beginner Contest 373
    ABC373A-September题目传送门代码(签到题)#include<cstdio>#include<cstring>usingnamespacestd;chars[1111];intans;intmain(){for(inti=1;i<=12;++i){scanf("%s",s+1);if(strlen(s+1)==i)++ans;}pr......
  • 2024.10.7 鲜花
    【UNR#3】百鸽笼花の塔君が持ってきた漫画くれた知らない名前のお花今日はまだ来ないかな?初めての感情知ってしまった窓に飾った絵画をなぞってひとりで宇宙を旅してそれだけでいいはずだったのに君の手を握ってしまったら孤独を知らないこの街にはもう二度と帰ってく......
  • 团队训练记录2024.10.7
    赛时依然和本校强队差两题比赛链接:https://codeforces.com/gym/104901A.ManyManyHeads这里先用栈处理好第一个状况,然后根据层数进行第二个状况是否存在判断#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;llgcd(llx,lly){if(y==0)retu......
  • The 2020 ICPC Asia Shenyang Regional Programming Contest Northeastern University
    The2020ICPCAsiaShenyangRegionalProgrammingContestNortheasternUniversity(SMU2024ICPC网络赛选拔赛2)D.JourneytoUn'Goro思路队友写得,没看。代码#include<bits/stdc++.h>usingnamespacestd;typedeflonglongintll;#defineintlonglong#defineP......