2017 Multi-University Training Contest 3

2024-04-07 04:08

本文主要是介绍2017 Multi-University Training Contest 3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2017 Multi-University Training Contest 3 solutions BY 洪华敦

1001

考虑容斥,枚举哪些限制强制不满足,把n减去这些不满足限制的和,然后计算组合数. 注意到组合数有点难算,注意到可以把组合数看成一个 mm阶多项式,就可以把问题转换成对每一个 1\leq k\leq m1km计算 kk次方的和. 如果 c=1c=1,可以数位dp,把每一位的贡献dp进去计算. 如果 c\neq 1c1,需要预先枚举有几个限制不满足,然后再数位dp. 注意到可以把随意选择的位的dp结果预处理好来进行加速. 时间复杂度 O(m^4)O(m4).

1002

我们知道,对于任意两个数 a,ba,b,我们有:

a~and~b=(a~or~b)-(a~xor~b)

我们枚举x=a~or~bx=a or by=a~xor~by=a xor b,显然要求的条件是x~and~y=yx and y=y

之后可以计算满足以上条件的(a,b)(a,b)2^{bit(y)}2bit(y)

于是可以将式子重写成:

C[k]=\sum_{x}\sum_{y}[x~and~y=y]*[x-y=k]*B[x]*A[y]*2^{bit(y)}C[k]=xy[x and y=y][xy=k]B[x]A[y]2bit(y)

C[k]=\sum_{x}\sum_{y}[x~and~y=y]*[x~xor~y=k]*B[x]*A[y]*2^{bit(y)}C[k]=xy[x and y=y][x xor y=k]B[x]A[y]2bit(y)

C[k]=\sum_{x~xor~y=k}[x~and~y=y]B[x]*A[y]*2^{bit(y)}C[k]=x xor y=k[x and y=y]B[x]A[y]2bit(y)

C[k]=\sum_{x~xor~y=k}[bit(x)-bit(y)=bit(k)]B[x]*A[y]*2^{bit(y)}C[k]=x xor y=k[bit(x)bit(y)=bit(k)]B[x]A[y]2bit(y)

用元素为多项式的FWT计算即可

时间复杂度:O(2^m*m^2)O(2mm2)

1003

我们只要求出对于一个数 xx左边最近的 kk个比他大的和右边最近 kk个比他大的,扫一下就可以知道有几个区间的 kk大值是 xx.

我们考虑从小到大枚举xx,每次维护一个链表,链表里只有>=x>=x的数,那么往左往右找只要暴力跳kk次,删除也是O(1)O(1)的。

时间复杂度:O(nk)O(nk)

1004

A_i~xor~A_j<A_j~xor~A_kAi xor Aj<Aj xor Ak,考虑 A_iAiA_kAk不同的位中最高的,根据这一位的值可以知道 A_jAj这一位的值必须是多少。

用一个字母树存下所有A_kAk,询问A_iAi时爬一下即可,顺便记录下中间有几个满足条件的A_jAj

时间复杂度:O(n\log{A_i})O(nlogAi)

1005

把1看成整棵树的根. 问题相当于把 2\sim n2n每个点一个 [1, k][1,k]的标号. 然后根据最小斯坦纳树的定义,  (x, fa_x)(x,fax) 这条边的贡献是 x 子树内不同标号的个数目 dif_idifi. 那么显然有 dif_i\leq min(k, sz_i)difimin(k,szi)sz_iszi表示子树大小. 可以通过构造让所有 dif_idifi都取到最大值. 所以答案就是 \sum_{x = 2}^{n}{w[x][fa_x] * min(sz_x, k)}x=2nw[x][fax]min(szx,k) 时间复杂度 O(n)O(n).

1006

问题相当于展开 f(x-\sum a_i)f(xai)

我们可以把每一项用二项式定理展开,然后可以发现这是可以用FFTFFT优化的。

时间复杂度:O(n\log{n})O(nlogn)

1007

建一个 extra bit always1他的值永远是1. 如何判断 x_i = 1xi=1? 新建一个 extra bit is[i][1], 初值为0,来存结果, 构造gate : i always1 is[i][1]. 如何判断 x_i = 0xi=0? 新建一个 extra bit is[i][0],初值为1,来存结果, 构造gate : is[i][1] always1 is[i][0]. 构造一个Trie. 每个节点 t 新建一个extra bit act[t], 并且构造gate : act[fa[t]] is[dep[t]][dir] act[t] 其中 dir 表示方向,如果t是左儿子就是0,否则就是1. 这样对于一组输入,恰好有一片叶子的act是1,对每片答案为1的叶子构造gate: act[t] always1 output_bit. 可以通过设定output_bit的初值来减少对叶子的判断. gate和extra bit个数大约在 2^{m+1}+2^{m}2m+1+2m左右.

1008

注意到一个数字 xx必然会被唯一表示成 a^2\times ba2×b的形式.其中 |\mu(b)| = 1μ(b)=1。 所以这个式子会把 [1, n^k][1,nk]的每个整数恰好算一次. 所以答案就是 n^knk,快速幂即可. 时间复杂度 O(\log k)O(logk).

1009

注意到计算的是欧拉回路. 把BEST's THEOREM 稍加修改可以得到答案.  Trees \times deg[1]! \times \prod_{i = 2}^{m}{(deg[i]-1)!}\prod_{i = 1}^{m}\prod_{j = 1}^{m}{\frac{1}{D_{i, j}!}}Trees×deg[1]!×i=2m(deg[i]1)!i=1mj=1mDi,j!1  TreesTrees表示1为根的生成树个数,用基尔霍夫矩阵计算就行了. 时间复杂度 O(m^3)O(m3).

1010

f[i][j]f[i][j]表示 p[1 : i]p[1:i]分成 jj段的最小代价. 显然可以写出一个 O(n^2k)O(n2k)dpdp. 考虑用cdq分治优化dp, 考虑用 f[l][j - 1] \cdots f[md][j - 1]f[l][j1]f[md][j1] 来影响  f[md + 1][j] \cdots f[r][j]f[md+1][j]f[r][j] 处理出 A_xAx表示 [x, md][x,md]的lca,  B_xBx表示 [md+1,x][md+1,x]的lca. 转移的时候计算lca(A[i],B[j])就行了. 考虑枚举每一个[md+1,r]的t.注意到转移分成两段,一段后缀满足lca是lca(B[t],p[md]),剩下的一段前缀lca是A[i], 前后缀的分界线可以单调移动得到. 然后分两段分别转移就好了,通过预处理前后缀最小值来 O(1)O(1)转移. 时间复杂度 O(nk\log n)O(nklogn)

1011

一个签到题,目的在于吐槽浙江的高温

统计有多少数<=35<=35即可。

这篇关于2017 Multi-University Training Contest 3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881608

相关文章

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

AtCoder Beginner Contest 370 Solution

A void solve() {int a, b;qr(a, b);if(a + b != 1) cout << "Invalid\n";else Yes(a);} B 模拟 void solve() {qr(n);int x = 1;FOR(i, n) FOR(j, i) qr(a[i][j]);FOR(i, n) x = x >= i ? a[x][i]: a[i][x];pr2(

Post-Training有多重要?一文带你了解全部细节

1. 简介 随着LLM学界和工业界日新月异的发展,不仅预训练所用的算力和数据正在疯狂内卷,后训练(post-training)的对齐和微调方法也在不断更新。InstructGPT、WebGPT等较早发布的模型使用标准RLHF方法,其中的数据管理风格和规模似乎已经过时。近来,Meta、谷歌和英伟达等AI巨头纷纷发布开源模型,附带发布详尽的论文或报告,包括Llama 3.1、Nemotron 340

CF Bayan 2015 Contest Warm Up B.(dfs+暴力)

B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/probl

CF Bayan 2015 Contest Warm Up A.(模拟+预处理)

A. Bayan Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/problem/A The fi

AtCoder Beginner Contest 369 D - Bonus EXP 动态规划

原题链接: https://atcoder.jp/contests/abc369/tasks/abc369_d 思路:   这道题为什么要用动态规划呢,其实,对于第i个怪物,我们有打与不打两种处理方式,而对于打,我们是获得两倍的经验值,还是一倍的经验值,与我们打了奇数只怪物还是打了偶数只怪物有关了,因此我们定义dp[i][0] 为前i只怪物总共打了偶数次,dp[i][1] 为前i只怪物总

2017 版本的 WebStorm 永久破解

1.  在IntelliJ官网中下载 最新版本的WebStorm   下载地址:https://www.jetbrains.com/webstorm/download/#section=windows 2. 获取注册码    获取地址:http://idea.lanyus.com/   点击获取注册码,然后将注册码复制,再打开最新版的WebStorm,将注册码粘贴到激活框中就大功告

【硬刚ES】ES基础(二十一) 单字符串多字段查询:Multi Match

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的ES部分补充。