首页 > TAG信息列表 > JSOI2009
luoguP4407 [JSOI2009] 电子字典 解题报告
传送门 题意 对于多个字符串,查询其在字典树上的存在性或删除/插入/替换一个字符后存在的个数。 思路 存在性好说,直接在 Trie 树上做一遍查找即可。那剩下的三个操作怎么办呢?分类讨论吧。 删除 该操作等同于在匹配时越过 \(S_i\) ,剩余的字符与当前匹配节点和连边继续匹配。 插入 该P4243 [JSOI2009]等差数列 题解
题目链接Link,题目内容不再赘述。 这题我用的是线段树,因为是区间操作,线段树比较好写主要指的是代码比较短,而且错误率不高,常数对于我这种蒟蒻来说已经很不错了。 不会线段树的点这里Link 下面我们来解决一下操作: A s t a b:把 \(s\sim t\) 的数分别加上一个等差数列,数列首项为 \(a\)[JSOI2009] 游戏
一、题目 点此看题 二、解法 真的神题,我至今不知道为什么要联想到最大匹配,说实话评个黑不过分吧。 一看就用不了 \(\tt sg\) 函数,这启示我们要去找稳态。考虑行走的过程可以看成二分图上增广的过程,利用完美匹配后不存在增广路这一性质,我们把行走放在二分图上思考。 对原图黑白染色P4571 [JSOI2009]瓶子和燃料
题目 P4571 [JSOI2009]瓶子和燃料 分析 使用裴蜀定理可以很容易转化成:给 \(n\) 个数选择其中 \(k\) 个可以得到的最大公因数。 考虑最大公因数的求法,在唯一分解定理之下其实就是对质因数的指数取 \(min\) 。 于是对所有数分解因数,找到出现次数大于 \(k\) 的因数即可,贪心取最大值P6125 [JSOI2009]有趣的游戏
【题意】 给定n个长度为l的字符串,字符集大小为m,每次在末尾随机生成一个字符,当出现字符串的时候停止,求这n个字符串作为终止的概率 【分析】 我们能想到在串末尾位置为增加字符就很想AC自动机的转移方式,所以我们可以考虑建立出AC自动机 然后考虑问题就被转换为到AC自动机上某些点的P4307 [JSOI2009]球队收益 / 球队预算
【题意】 【分析】 这道题目可以说集结了蛮多套路 首先就是平方拆边,平方拆边指的是当贡献是平方这种形式的时候,我们可以增量构造边,保证每次走的边递增 比如$(a+1)^2-a^2=2a+1$,那么我们建的边就是a,3a,5a.....,这样既保证了从小到大依次走,也保证了平方的形式 第二个套路就是费洛谷P4054 [JSOI2009]计数问题(二维树状数组)
Sol很傻x的题。。c才100, n, m才300,直接开100个二维树状数组就做完了。。#includeusing namespace std; const int MAXN = 301; inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '9') {if(c == '-') f = -1; cP4243 [JSOI2009]等差数列
好题。 我们的两种操作均是等差数列,那就来挖掘一下等差数列的性质。 那还用说,当然是相邻两项差相等啦。 发现其实就是求该序列的一个 差分序列 ,那么我们就搞出这个序列,这里令 \(s_{i}=a_{i+1}-a_{i}\) 。回头看操作一: 在原序列上一个区间 \([l, r]\) 加上一个等差数列。 求差分【BZOJ1560】[JSOI2009] 火星藏宝图(暴力DP)
点此看题面 大致题意: 一张\(m\times m\)的图上有\(n\)个点,每个点有一个收益。每次只能从一个点到右下方的另一个点,代价是两点间距离的平方。求从\((1,1)\)到\((n,m)\)收益减代价的最大值。 暴力 对于每一个关键点,显然可以枚举所有在它左上方的点作为到达它的前一个点。 若之前出现【BZOJ1443】[JSOI2009]游戏Game(二分图+博弈)
BZOJ 题意: 给出一个\(n*m\)的网格,其中有一些障碍点。 现在两个人玩游戏,首先先手选定一个点,然后从后手开始轮流移动,不能移动者即输掉这次游戏。 规定不能移动到那些之前已经到过的格子上。 思路: 网格图可以联想到二分图,我们可以对其进行黑白染色。 注意如果先手必赢的话,直到终点只题解 P4054 【[JSOI2009]计数问题】
先无良宣传一下博客 \(wwwwww\) 文章列表 - 地灵殿 - 洛谷博客 知识点 : 多维树状数组 . 二维树状数组模板题 . 可以发现 , 矩阵中值的值域很小 \(w\le 100\) 考虑暴力思路, 构建 \(100\) 个二维树状数组, 分别存储各数值 , 在矩阵中出现的次数. 对于单点修改操作: 将点 \((x,y[JSOI2009]球队收益
题目 这题好神啊 我们发现一个球队的总比赛场数是确定的,设第\(i\)支球队一共进行了\(s_i\)场比赛 于是这个球队的收益就是\(c_i\times x^2+d_i(s_i-x)^2\) 我们拆开柿子可以发现\(c_ix^2+d_ix^2+d_is_i^2-2xs_id_i\) 我们拿出和\(x\)有关的项来发现\((c_i+d_i)x^2-2s_id_ix\) 现在[JSOI2009] 球队收益 (费用流)
终于来发题解啦! #include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<queue>#include<climits>using namespace std;inline int read(){ int f=1,ans=0;char c=getchar(); while(c<'0'||cBZOJ1558: [JSOI2009]等差数列
BZOJ1558: [JSOI2009]等差数列 题目描述 传送门 题目分析 等差数列的题么,先差分一下,然后就变成了一个数列上,求\([L,R]\)区间内连续相同的段数了。很相似的是[SDOI2011]染色这道题,但是由于我们这个线段树存的是差分后的数组,所以需要考虑一个数是否作为一个分段的头和尾造成的影响。洛谷P4054 [JSOI2009]计数问题(二维树状数组)
题意 题目链接 Sol 很傻x的题。。 c才100, n, m才300,直接开100个二维树状数组就做完了。。 #include<bits/stdc++.h> using namespace std; const int MAXN = 301; inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '9') {if(c ==