首页 > TAG信息列表 > BJOI2019
【题解】P5322 [BJOI2019] 排兵布阵(DP,背包)
【题解】P5322 [BJOI2019] 排兵布阵 挺开心的,毕竟这是我为数不多自己做出的蓝题之一。 题目链接 P5322 [BJOI2019] 排兵布阵 - 洛谷 题意概述 这道题的题意很清楚,所以这里直接摘抄原题题面。 小 C 正在玩一款排兵布阵的游戏。在游戏中有 \(n\) 座城堡,每局对战由两名玩家来争「BJOI2019」勘破神机
Description 设 \(F_n\) 表示用 \(1\times 2\) 的骨牌填满 \(2\times n\) 的矩阵的方案数,\(G_n\) 表示用 \(1\times 2\) 的骨牌填满 \(3\times n\) 的矩阵的方案数。给出 \(l,r,k\),分别求出: \[\frac{1}{r-l+1}\sum_{n=l}^r\binom{F_n}{k} \] \[\frac{1}{r-l+1}\sum_{n=l}^r\binom{[BJOI2019]勘破神机
[BJOI2019]勘破神机 m = 2 \[f[n] = f[n - 1] + f[n - 2]\\ ans = \sum_{i = l}^r(\frac{f[i]}{k})\\ (\frac{f[i]}{k}) = \frac{f[i]^{\underline{k}}}{k!} = \frac{1}{k!}\sum_{j = 0}^k(-1)^{k - j}s(k , j)f[i]^j\\ ans = \frac{1}{k!} * (-1)^k\sum_{j = 0}^BJOI 2019 题目选做
之前做过的:[BJOI2019] 排兵布阵、[BJOI2019]删数 就懒得更了 [BJOI2019]勘破神机 已经弃疗了。 [BJOI2019]送别 还在咕咕咕咕。 Luogu5323 [BJOI2019]光线 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收。 设对于任P5323 [BJOI2019] 光线 - 数学
题解 比较简单的题,不知道为啥紫。 考虑前 \(i\) 层玻璃的真实反射率和透光率。设 \(f_i\) 为透光率,\(g_i\) 为反射率,那么: \[f_i=f_{i-1}\cdot a_i\cdot \sum_{k=0}^{+\infty} (g_{i-1}\cdot b_i)^k\\ g_i=b_i+a_i^2\cdot g_{i-1}\cdot \sum_{k=0}^{+\infty} (g_{i-1}\cdot b_i)^kTheZealous的集训日常之奇奇怪怪的dp题(1) 洛谷P5322 [BJOI2019]排兵布阵
排兵布阵! 【思路】 1.审题:我方派出的兵一定要比敌方所出兵的二倍要多;要使用一个策略攻打多个对手。 2.分析:既然要使用一个策略攻打多个对手,那么对于每个城堡而言,每个对手派出的兵力不同,只要我打败了派出兵力多的,我就一定可以打败派出兵力少的。则可把该游戏转化为分组背包,每个城堡loj#3094. 「BJOI2019」删数
Description loj#3094 Solution 首先肯定是考虑在没有修改的情况下,直接给定序列该如何计算该序列需要修改几个数才能删空: 首先,该序列的顺序对答案是没有任何影响的,影响答案的只有某个数的出现次数,这令我们想到在值域数轴上用桶维护每个数的出现次数。 接下来考虑模拟删边的过程,一【题解】[BJOI2019]删数
Problem \(\text{Solution:}\) 记 \(cnt_x\) 表示数 \(x\) 的出现次数。 那么,一个数 \(x\) 能删去的范围应该是: \([x-cnt_x+1,x].\) 考虑一个序列能被删去,当且仅当它的范围被完全覆盖到。 所以最小修改次数就是 没有被覆盖的区间的长度 。 那么我们可以把每一个数抽象成一条线段,进「BJOI2019」奥术神杖
知识点:01 分数规划,ACAM。 原题面:Loj,Luogu。 没写 build 函数调一天哈哈 简述 给定一只由数字和\(\texttt{.}\)构成的字符串 \(s\)。给定 \(m\) 个特殊串 \(t_{1}\sim t_{m}\),\(t_i\) 的权值为 \(v_i\)。 需要在 \(s\) 中为\(\texttt{.}\)的位置上填入数字,一种填入方案的价值定义「BJOI2019」奥术神杖(AC自动机+DP)
文章目录 titlesolutioncode title solution 令 M a g i c = VBJOI2019 删数
删数 对于任意一个数列,如果能在有限次进行下列删数操作后将其删为空数列,则称这个数列可以删空。一次删数操作定义如下: 记当前数列长度为 \(k\),则删掉数列中所有等于 \(k\) 的数。 现有一个长度为 \(n\) 的数列 \(a\),有 \(m\) 次修改操作,第 \(i\) 次修改后你要回答:经过 \(i\) 次Luogu P5320 [BJOI2019]勘破神机
Link \(m=2\) 此时答案为\(\frac{\sum\limits_{i=l+1}^{r+1}{f_i\choose k}}{r-l+1}\),其中\(f_i\)为第\(i\)个Fibonacci数。 也就是说我们现在要考虑如何求出\(\sum\limits_{i=l}^r{f_i\choose k}\)。 我们知道\(f_n=\frac1{\sqrt5}(\frac{1+\sqrt 5}2)^n-\frac1{\sqrt5}(\frac{1-! BJOI2019奥术神杖
\(f_{i,u,v},i\)位,AC自动机上\(u\)位置,\(v\)次匹配的最大值 大菜鸡又去翻题解 两边取对数!!! \[ams=\sqrt[c]{\prod_{i=1}^cw_i} \]\[lnans=\frac1c\sum_{i=1}^clnw_i \]分数规划,二分DP即可 #include<bits/stdc++.h> using namespace std; inline int read(){ int x=0,f=1;char c=g[BJOI2019]总结
光线 忽略\(\%\)为了行文方便。一种直接的方法:构建图以及概率的转移。定义光线方向朝下,且在第\(i\)个玻璃和\(i+1\)个玻璃之间(\(i=0\)表示第一块玻璃的上方,\(i=n\)表示在最后一块玻璃的下方)的光线总数为\(f_i\)。那么我们想要的答案即为\(f_n\)。然后我们列出来转移,发现有 \[fLuoguP5322 [BJOI2019]排兵布阵(DP)
城为物,人为容,价值?排序后,一切都明了 #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++a) #define nR(a,b,c) for(「BJOI2019」
dtoj#4374. 「BJOI2019」光线 题目描述: 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收。 设对于任意 $x$,有 $x\times a_i\%$ 单位的光会穿过它,有 $x\times b_i\%$ 的会被反射回去。 现在 $n$ 层玻璃叠在一起,有 $1$ 单位的光打【LOJ】#3092. 「BJOI2019」排兵布阵
LOJ#3092. 「BJOI2019」排兵布阵 这题就是个背包啊,感觉是\(nms\)的但是不到0.2s,发生了什么。。 就是设\(f[i]\)为选了\(i\)个人最大的代价,然后有用的人数只有\(s\)种 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair[BJOI2019]光线——递推
原题看我 题解 如果能把多块玻璃合并到一起多棒啊,但是直接把多块合并似乎不太可能,考虑两两合并 也就是已知上下层玻璃的透光率分别为\(a_1\%\)和\(a_2\%\),反射率分别为\(b_1\%\)和\(b_2\%\),求一块等效的玻璃,使得它和两块玻璃叠在一起的效果相同 (有一点要注意一下,就是合并后的玻璃上【题解】Luogu P5324 [BJOI2019]删数
原题传送门 易知这个数列的顺序是不用考虑的 我们看两个数列 \(1,2,3\)和\(3,3,3\)都能删完,再看两个数列\(1,2,3,4\)和\(2,2,4,4\) 不难发现,我们珂以把这些数字塞进桶中,记\(cnt_i\)表示数字\(i\)出现的次数,对于每个\(i\),在一颗线段树上把区间\([i-cnt_i+1,i]\)赋值成1(因为一次删\(c[BJOI2019省内集训]完美塔防 题解
没学过2-SAT... 亏爆 考虑把每个炮台当做一个01变量,0横着放,1竖着放,再把图转成约束条件。 具体来说: 如果某一种摆放方式能打到炮台:强制其为false, 即\(addedge(true(x), false(x))\) 某一个空地能被最多两个方向的炮台打到,就可以建立一个or关系。 就做完了(雾 输出方案就是2-SAT的经#loj3094 [BJOI2019]删数
不妨换个想法,构造出一个可以被删光的数列,最大化这个数列和原来数列相同的元素个数 显然一个可以被删光的数列可以分成几段相同的数字,并且每段数字的值刚好等于小于等于这种数字的元素个数 那么可以想出一个naive的dp做法,去dp这些段, 转移方程为 \[dp(i)=max(dp(j)+min(i-j,cnt(i)))[BJOI2019]排兵布阵
思博题 大力dp就行了 \(O(nms)\) #include<cstdio> #include<algorithm> #include<map> using namespace std;const int M=2*1e5+10; typedef long long ll;const int N=110; int mp[N][N];int dp[M];int s;int n;int m; map <int,int> tval; int main() {Luogu5324 BJOI2019删数(线段树)
考虑无修改怎么做。对于1~n的每个数,若其存在,将最后一个放在其值的位置,剩余在其前面依次排列,答案即为值域1~n上没有数的位置个数。带修改显然记一下偏移量线段树改一改就好了。 #include<iostream> #include<cstdio>#include<cmath>#include<cstdlib>#include<cstring>#include题解-BJOI2019 光线
Problem loj3093 & x谷 题意概要:给定 \(n\) 块玻璃,每块玻璃有其折射比例与反射比例(折射比例+反射比例 不一定为 \(100\%\)),求从最上头打下一束光,有多少比例的光可以完全穿越 \(n\) 块玻璃 \(n\leq 5\times 10^5\) Solution 一眼线性高斯消元,但是我懒……物理题当然不要那么麻烦啦 由luogu P5320 [BJOI2019]勘破神机
传送门 首先我们要知道要求什么.显然每次放方块要放一大段不能从中间分开的部分.设\(m=2\)方案为\(f\),\(m=3\)方案为\(g\),\(m=2\)可以放一个竖的,或者两个横的,所以\(f_i=f_{i-1}+f_{i-2}\);\(m=3\),因为只有\(i\)为偶数有值,所以后面的\(i\)其实是\(2i\),然后可以发现要么放三个