首页 > TAG信息列表 > JSOI2008

[JSOI2008]球形空间产生器

\(\text{Code}\) 经过简单的转换后高斯消元即可 好久没打过高斯消元了,最近的还是 \(\text{two years ago......}\) #include <cstdio> #include <iostream> #define RE register using namespace std; int n; double a[15][15], b[15][15]; int main() { scanf("%d", &

P1197 [JSOI2008]星球大战 题解

这题有着很深的背景呢…… 本孱弱第一次写题解,请多多支持 这题最有意义的地方是:逆序思考。 不断的维护摧毁后的数量,会非常困难。但是!~ 我们不妨去试着重建,一点一点重建。假设这些都是已经被摧毁了的,那么我们如果修复该怎么办呢?我们可以把它周围的所有道路都重新连起来,并且通过并

BZOJ1014: [JSOI2008]火星人prefix(splay 二分 hash)

Sol一眼splay + 二分hash,不过区间splay怎么写来着呀试着写了两个小时发现死活不对看了一下yyb的代码发现自己根本就不会splay。。。。// luogu-judger-enable-o2 #include#define ull unsigned long long  using namespace std; const int MAXN = 1e6 + 10; const u

[JSOI2008]Blue Mary开公司

嘟嘟嘟 题意:1.在直角坐标系中加入一条直线。2.求横坐标为\(x\)时最大的函数值。 然后有一个叫李超线段树的东西专门解决这样一类问题。 很巧妙,也很简单。 我就直接给几个链接吧。[JSOI2008]Blue Mary开公司(李超线段树)李超线段树 第二篇博客复杂度写错了,修改查询都应该是\(O(log

[JSOI2008] 小店购物

题面 小店购物 题解 这道题建边方式很套路。 定义有向边 \((u,v,w)\) 表示买了 \(u\) 之后,能以边权 \(w\) 的价格买 \(v\) 。 对于原价的物品,建一个超级源点,分别连接每个物品。对于特价的物品,根据以上的定义,连接两个有依赖关系的物品。 因为通过这样的定义方式,每个物品 \(v\) 能

[JSOI2008]火星人

嘟嘟嘟 嗯。 splay维护哈希。 如题,用splay维护哈希,查找的时候二分。所以复杂度是取决于询问复杂度:\(O(n \log^ 2{n})\)。 这道题还有一个技巧,就是一个节点记录的是他的子树的哈希值,所以树的的形态改变的同时,每一个节点记录的哈希值也在改变。在pushup的时候,应该这么写:\(t[now].ha

[JSOI2008]最大数maxnumber

嘟嘟嘟   就是线段树板子题,还是单点修改区间查询。 用一个指针cnt记录当前序列里有几个数,然后操作1就是把++cnt的位置的数改为(n + t) % d;操作2就是查询cnt - L + 1到cnt的区间最大值。 我用的是先把线段树的节点开好的方法,所以这题按区间长度等于m开就行。 1 #include<cstdio

[JSOI2008]星球大战starwar

嘟嘟嘟   维护联通块自然想到并查集,然而题中说是删边,不是很好做,因此我们可以离线下来然后倒序操作,就变成了添加边的同时维护联通块数量。 首先我们把k次打击后剩的边都添加到图中,表示倒序时的初始状态。然后将 i 从 k 到1枚举,将第 i 个被袭击的星球 del[i] 连的所有边都加入图中,

[JSOI2008]星球大战

题目链接:星球大战 题意:这道题就是给出一张无向图,然后每次消除一个点,一共消除k次,问每次该图连通块数量(一个点也算一个连通块) 思路:逆向思维 + 并查集。 解析:每次破坏后求连通块无思路,若从最后破坏完毕后,往回模拟,实际上就是进行k次修复,那么一开始我们假设每个点都是一个连通块,进行k

[JSOI2008]魔兽地图DotR 做题心得

目录[JSOI2008]魔兽地图DotR 做题心得题解一些记号基本策略与dp设状态dp转移代码 [JSOI2008]魔兽地图DotR 做题心得 马上要 JSOI2021 了,来看看以往的题 对于树形dp题,就是要想一下:基本策略是什么?然后根据基本策略,想一想dp要维护什么,怎么转移。再加上一些套路之类的东西,维护一下。像

P4036 [JSOI2008]火星人

火星人 每次询问区间中的两个点 \(l,r\) 为起点的字符串的 LCP,支持单点修改和插入。 如果没有后面两个操作,直接 二分 + Hash 维护即可。 在有后面操作的情况下,我们需要一个支持 单点修改 和 插入 的数据结构,显然平衡树可以。 至于 Hash 值,简单 push_up 一下就好了。 #include<cs

BZOJ-1012 [JSOI2008]最大数maxnumber(线段树)

题目描述   维护一个初始为空的序列,\(m(m\leq 2\times 10^5)\) 次操作,有两种操作:   查询操作:Q L,查询当前序列中末尾 \(L\) 个数中的最大的数,并输出这个数的值。   插入操作:A d,将数字 \(d\) 加上 \(lastans\),\(lastans\) 是最近一次查询操作的答案,并将所得结果对一个固定的常

题解 P1197 【[JSOI2008]星球大战】

链接戳这里☞ 星球大战 #include<cstdio> #include<cstring> #include<vector> #include<queue> using namespace std; int mp[400001][3]; vector<int> q; vector<int> edge[400005]; int m,n,z,res; boo

[JSOI2008]球形空间产生器(线性代数+高斯消元)

题目大意 给你一个n维球体上的n+1个点,让你求这个n维球体的球心。数据保证球心是唯一的。 Analysis 将球心设出来为$(x_1, x_2, \cdots, x_n)$,设半径为$r$。设球上一点为$(y_1, y_2, \cdots, y_n)$,根据n维空间内两点之间距离公式得$\sum_{i=1}^n (y_i-x_i)^2=r^2$。 设每个点表示为

P1197 [JSOI2008]星球大战

算法 并查集+逆序 思路 做这道题前呢,我们先出门左转关闭农场,一道类似的更简单一丢丢的题 然后,我们考虑一下这题,因为并没有过多的操作,只是要我们求一下连通块的个数而已(也就是连通性,具有传递性的连通),而这恰好是并查集所擅长的。 然而,我们正向看题目时就会发现不支持删除操作的并查

[JSOI2008]Blue Mary的旅行

[**[JSOI2008]Blue Mary的旅行**](https://www.luogu.org/problem/P4400) #### 题解: 看见这些人流动的过程,我们很容易想到网络流,看见最早到达时间,~~我们很容易想到费用流~~。 我们可以看出题目中所说的z对应着网络流中的容量,但是一天过后又重新可以使用这一条边,我们显然不能

[JSOI2008]最大数(并查集)

并查集的神奇用法:[JSOI2008]最大数 Description   现在请求你维护一个数列,要求提供以下两种操作:   1、 查询操作。   语法:Q L   功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。   限制:LL不超过当前数列的长度。(L > 0)(L>0)   2、 插入操作。   语法:A n   功

[JSOI2008]火星人 - Splay + 哈希

Description 维护一个字符串,支持插入字符,修改字符,以及求两个后缀的\(lcp\)。 Solution 建立一棵\(Splay\)来维护整个串,每个节点维护整个子树的哈希值。对于插入,直接在对应的位置插入;修改也直接修改就好;然后一路\(update\)。对于查询,考虑二分,然后每次查询对应区间的哈希值,\(O(1)\)

P4035 [JSOI2008]球形空间产生器

 如有乱码,请点击。 题目描述 有一个球形空间产生器能够在 nn 维空间中产生一个坚硬的球体。现在,你被困在了这个 nn 维球体中,你只知道球面上 n+1n+1 个点的坐标,你需要以最快的速度确定这个 nn 维球体的球心坐标,以便于摧毁这个球形空间产生器。 输入格式 第一行是一个整

Luogu P4035 [JSOI2008]球形空间产生器

题目描述 有一个球形空间产生器能够在 \(n\) 维空间中产生一个坚硬的球体。现在,你被困在了这个 \(n\) 维球体中,你只知道球面上 \(n+1\) 个点的坐标,你需要以最快的速度确定这个 \(n\) 维球体的球心坐标,以便于摧毁这个球形空间产生器。 输入格式 第一行是一个整数\(n \left( 1 \le N

luogu 4208 [JSOI2008]最小生成树计数

题目描述 现在给出了一个简单无向加权图。你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树。(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的)。由于不同的最小生成树可能很多,所以你只需要输出方案数对31011的模就可以了。 输入

LG4035/BZOJ1013 「JSOI2008」球形空间产生器 高斯消元

问题描述 LG4035 BZOJ1013 题解 设答案为\((p_1,p_2,p_3,...,p_n)\) 因为是一个球体,令其半径为\(r\),则有 \[\sum_{i=1}^{n}{(a_i-p_i)}^2={\rm dis}^2\] 拆式子可得 \[\sum_{i=1}^{n}a_i^2-2\times\sum_{i=1}^{n}{a_ip_i}=\sum_{i=1}^{n}p_i^2-{\rm dis}^2\] 于是可以构造出新的

P4035 [JSOI2008]球形空间产生器

传送门 看到题目,啥,高维球体? 确定球心?模拟退火,爬山走起 emm,直接解方程就好了 首先方程有二次项,但是发现给了 $n+1$ 个方程 所以随便拿一个出来和其他 $n$ 个方程减一下,就把 $x^2$ 给消掉了 然后就可以高斯消元了 化完以后方程的形式大概就是 $\sum_{i=1}^{n}p[t][i]^2-p[k][i]^2=\s

luogu1198 JSOI2008 最大数

题目 题目描述现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。 限制:L不超过当前数列的长度。(L>=0) 2、 插入操作。 语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则

Luogu P1197 [JSOI2008]星球大战

经巨佬们指教,得知要用:逆向思维法(这个一定要想到啊QwQwQ) 之后想了想,发现我大致思路跟第一篇题解比较像(后来AC代码的细节不一样,我是在每次‘恢复’循环开始时计数的,题解是循环末尾,大同小异吧) 但我在每次计数的写法上调了好长时间 最初想的是每次枚举每个结点看是否fa[i]==i,后来才知