首页 > TAG信息列表 > SCOI2016

【洛谷】P3293 [SCOI2016]美味(贪心+可持久化线段树)

原题链接 题意 一家餐厅有 \(n\) 道菜,编号 \(1,2,...,n\) ,大家对第 \(i\) 道菜的评价值为 \(a_i\)。有 \(m\) 位顾客,第 \(i\) 位顾客的期望值为 \(b_i\),而他的偏好值为 \(x_i\)。因此,第 \(i\) 位顾客认为第 \(j\) 道菜的美味度为 \(b_i\,\,xor\,\, (a_j+x_i)\),\(xor\) 表示异或运

「SCOI2016」美味题解

链接:#2016. 「SCOI2016」美味 - 题目 - LibreOJ (loj.ac) 题意:给定一段序列,多次查询区间 [ l , r ]

【题解】[SCOI2016]幸运数字

[SCOI2016]幸运数字 \(\text{Solution:}\) 这题是个板子。显然的思路就是直接用树剖线段树维护合并线性基,这样就可以做到 \(O(n\log ^4 n)\) 的复杂度。 这东西 十分卡常 ,所以代码里用了 fread,fwrite 等优化,以及: 合并线性基的时候,我们会发现,一个位置只会往比它低的位置合并。 加

[SCOI2016] 萌萌哒

一、题目 点此看题 二、解法 首先拆限制,看似他给的是区间相等,其实是若干组单点相等。 那么把单点的限制用并查集连起来,我们只需要关系联通块个数即可。 问题转化为了每次给两个区间,要求区间对应位连边。线段树优化建图做不了,但是 \(st\) 表可以,设 \(fa[i][j]\) 表示以 \(i\) 为左

洛谷 P3293 [SCOI2016]美味(主席树)

    const int N=2e5+5; int n,m; int i,j,k; int a[N]; struct Node { int l,r; int sz; }t[N<<5]; int root[N],tot=0; void update(int &x,int y,int l,int r,int pos) { x=++tot; t[x]=t[y]; t[x].s

luogu P3292 [SCOI2016]幸运数字

题面传送门 树上问题没有修改,考虑倍增。 然而发现如果暴力合并线性基要\(O(nlognlog^2w+qlognlog^2w)\)铁定过不去。 考虑优化。 可以发现线性基有一个很优秀的性质就是两个有重叠部分的线性基合并是没有影响的。 那么可以用st表的思虑拿来合并了,复杂度降到\(O(nlognlog^2w+qlog^2

[SCOI2016]围棋

题意 题目链接 做法 首先你得先轮廓线DP(不一定得会插头DP,但这两玩意好像没差) 题解部分照搬:https://www.luogu.com.cn/blog/duyi/solution-p3290,讲的挺好的。 先做补集转化。把“至少有一次匹配”,转化为求“禁止出现匹配”。然后用\(3^{nm}\)减去禁止出现匹配的方案数,就是答案了。

P3292 [SCOI2016]幸运数字

lca倍增的途中,merge一下线性基。注意线性基是从自己开始,而倍增数组fa[i][0]等于father,意味着,线性基倍增的区间是左闭右开的,fa数组是左闭右闭 #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<cstdlib> #include<climits> #include<stack> #in

Luogu P3290 [SCOI2016]围棋

ORZ陈指导花式切题,奶一口今年陈指导必进队! 虽然这题是插头DP的练习题,但是数据太水我们仍然可以直接状压水过去 首先考虑我们只需要求出一个都不匹配的方案数然后减一下就好了,所以我们考虑怎么算不匹配的方案数 相信大家都注意到了只有两行这个条件,再加上数据范围很小,我们先考虑一

[SCOI2016]萌萌哒

解题报告 题目传送门:https://www.luogu.com.cn/problem/P3295 解决 题目中给出的限制条件是对应的位置必须填一样的数字,便想到了并查集,然后一波并查集莽上去喜提20分。再然后就不知所措了,只好再去膜一膜大佬,才晓得优化要用倍增跟ST表。 为什么能用倍增呢? (众所周知)倍增来源于两

P3295 [SCOI2016]萌萌哒——倍增并查集

P3295 [SCOI2016]萌萌哒 题目描述 一个长度为 nn 的大数,用 S_1S_2S_3 \cdots S_nS1​S2​S3​⋯Sn​表示,其中 S_iSi​ 表示数的第 ii 位, S_1S1​ 是数的最高位。告诉你一些限制条件,每个条件表示为四个数,l_1,r_1,l_2,r_2l1​,r1​,l2​,r2​,即两个长度相同的区间

【ST表】SCOI2016 萌萌哒

题目内容 洛谷链接 一个长度为\(n\)的大数,用\(S1S2S3...Sn\)表示,其中\(Si\)表示数的第\(i\)位,\(S1\)是数的最高位,告诉你一些限制条件,每个条件表示为四个数,\(l1,r1,l2,r2,\)即两个长度相同的区间,表示子串\(Sl1Sl1+1Sl1+2...Sr1\)与\(Sl2Sl2+1Sl2+2...Sr2\)完全相同。比如n=6时,某限制条

P3293 [SCOI2016]美味 主席树+按位贪心

给定长度为 \(n\) 序列 \(a[i]\) ,每次询问区间 \([l,r]\) ,并给定 \(b,x\) 中的一个数 \(p=a[i]\) ,使得最大化 \(b \bigoplus p^x\) 主席树+按位贪心。 我们可以直接贪每一位长什么样子,然后再主席树上区间查询即可。 #include<iostream> #include<cstdio> #include<algorithm> #inc

[BZOJ4568][SCOI2016]幸运数字

传送门 有一个两个log的在线做法,有点类似kcz说的序列做法 对每一个点,我们可以预处理出从根到它的线性基,并且贪心的让高位的向量对应的点深度尽量大,并预处理出 pos[x][i]pos[x][i]pos[x][i] 表示 xxx 号结点第 iii 位的向量对应最深的点,可以用以下代码求出。 LL bas[N][61];

[SCOI2016]萌萌哒

题目 这也太妙啦 首先这个题等价于问最后的联通块数量,一个非常显然的暴力就是暴力把两个区间的按位合并,自然是用并查集,复杂度\(O(\sum r_i-l_i+1)\) 我们看到这个题大概在用并查集来维护连边,那么接下俩应该就是优化一下这个连边过程了,考虑一下分块,线段树以及倍增发现就倍增可行一些

[SCOI2016]幸运数字

算简单的了,直接拿线性基维护路径异或然后倍增跳合并就行。 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue> #include<set> #include<map> #include<iostream> using namespace

P3292 [SCOI2016]幸运数字 (倍增线性基)

题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一。每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征。 一些旅行者希望游览 A 国。旅行者计划乘飞机降落在 x 号城市,沿着 x 号城市到 y 号城市之间那条唯一的

[SCOI2016] 萌萌哒

用并查集合并相同的点,答案为9*10^{并查集的块数-1}。 由“区间对区间的”可以联想到线段树优化之类的方法,换成倍增会更简单~ #include <bits/stdc++.h> #define ll long long using namespace std; const int N=1e5+10; const int mod=1e9+7; int n,m,L[N],f[20][N]; int find(i

SCOI2016 美味

题目链接:戳我 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define MAXN 200010 using namespace std; int n,m,tot,ans; int a[MAXN+10],rt[MAXN+10]; struct Node{int ls,rs,sum;}t[MAXN*3

[SCOI2016] 萌萌哒

题目链接: 传送门 题目分析: 一道并查集好题 首先考虑暴力思路:由于每次给定区间内的数字要一一相等,把每个数字看成一个点,需要相等的数字就可以合并成一个点,用并查集维护 最后计算独立集合的个数,答案为\(9*10^{k-1}\)(首位不为1,只有9种选择) 上述思路复杂度是\(O(nm)\)的,显然跑不过,考虑

luogu3292 [SCOI2016]幸运数字

link 题目大意:给一棵树,每个点有个权值,N<=2万 20万次询问,每次询问查询某两个点路径上所有点的权值xjb异或的最大值 首先看到xjb异或就可以断定是线性基了 并且由于这是树上问题我们可以通过树剖Dfs序之类的手段搞成序列问题 但是树剖+线段树的复杂度是 \(O(\log ^2N\log^2 2^{60})\)

[SCOI2016]萌萌哒

https://www.luogu.org/problemnew/show/P3295 最近对省选题充满敬畏之心 先想30分暴力:对于一组相等的关系,我们用并查集表示哪些数需要相等,如果相等就放在一个集合里,最后统计答案就9 * 10 ^ (集合个数-1) 这样就是O(n^2)的 正解是看了题解想出来的,不然真的没辙 考虑维护f[i][j]:i->i

[SCOI2016]围棋

Description 近日,谷歌研发的围棋AI—AlphaGo以4:1的比分战胜了曾经的世界冠军李世石,这是人工智能领域的又一里程碑。与传统的搜索式AI不同,AlphaGo使用了最近十分流行的卷积神经网络模型。在卷积神经网络模型中,棋盘上每一块特定大小的区域都被当做一个窗口。例如棋盘的大小为5×6,窗

SCOI2016 Day2 简要题解

「SCOI2016」妖怪 题意 有 \(n\) 只妖怪,每只妖怪有攻击力 \(\text{atk}\) 和防御力 \(\text{dnf}\) ,在环境 \((a, b)\) 下,它可以把攻击力和防御力以 \(a : b\) 的代价呼唤,它的最强战斗力为互换后的攻击力与防御力的最大值。 现要给他们一种环境,使得它们的最强战斗力最小。答案保留

p3295 [SCOI2016]萌萌哒

传送门 分析 我们可以将一个点拆成logN个点,分别代表从点i开始,长度为2^k的子串 那么当我们处理两个区间相等的关系时,对区间做二进制拆分,拆成log个区间,分别并起来即可 当然我们这样做修改是省心了,但是同时查询的时候也会带来一些麻烦……因为,我们要求的信息是最底层的,只能是长度为1的