yzoj P2345 战争 题解】的更多相关文章

纯数论 30分:纯暴力,直接模拟判断t秒后,判断hp是否小于0 60分: atk>=h,就是一炮一个,那么军队会在min(n,t)秒之后停止攻击,那么总伤害就是a[n+(n-1) +(n-2)+........(n-min(n,t)+1) 等差数列求和d=a(2n-min(n,t)+1)*(min(n,t))/2; 如果d>=hp Yes,否则No: 100分 考虑前t秒军队伤害总和,然后和hp比较大小 先算几下打死一个士兵,设m下 那么前m秒伤害为nma m+1到2m秒伤害为m(n-1)a…
题目链接: https://www.luogu.org/problemnew/show/P3324 分析: 因为本题的时间点较多,不能枚举,但发现有单调性,于是二分答案,二分使用的时间TTT 每个攻击装置造成的伤害总量已知,为T∗BiT*B_iT∗Bi​,现在有了伤害总量.生命总量,如何判断在TTT时间内,机器人是否被全部打死? 源点S向所有攻击装置连边,流量为T∗BiT*B_iT∗Bi​ 攻击装置向能攻击到的机器人连边,流量为INF 所有机器人向汇点T连边,流量为AiA_iAi​ 验证TTT时…
题目链接:https://www.luogu.org/problemnew/show/P2172 分析: 不要被[国家集训队]的标签吓到,其实这题不是很难. 本题可以对比P4304 [TJOI2013]攻击装置:互不攻击的网络流问题来想. 这道题唯一添加的条件就是只能从上往下征战,于是我们就从8个方向缩减到了四个放向,哪四个呢? aa[1]=r;bb[1]=-c; aa[2]=r;bb[2]=c; aa[3]=c;bb[3]=-r; aa[4]=c;bb[4]=r; 变量名较丑 然后还是要循环每…
题意:给n个积木,搭成两个高度相同的塔,问最高高度 正解是dp 答案在dp[n][0] 代码 #include<bits/stdc++.h> using namespace std; int f[2][1000050],n,a[51],ans; int main(){ memset(f,-0x3f,sizeof(f)); scanf("%d",&n); for(int i=1;i<=n;++i){ scanf("%d",&a[i])…
题意 先讲一下一种容易陷入误区错误思路 要使时间最小,就去找相对于每个点的最短曼哈顿距离,然后取最大值,时间就是(maxn+1)/2. 代码 #include<cstring> #include<algorithm> #include<cmath> #include<cstdio> #include<iostream> #define ll long long #define MX 55 using namespace std; int d[MX…
题意 给出n* n 的图,A为起点,B为终点,* 为障碍,.可以行走,问最少需要拐90度的弯多少次,无法到达输出-1. 解析 思路:构造N * M * 4个点,即将原图的每个点分裂成4个点.其中点(i,j,k)表示在(i,j)时人的方向是k,然后对于两个点(i,j,k)和(i,j,kk),如果k和kk是两个旋转90度能转换的方向,就连一条边权为1的边,而对于(i,j,k)和(i+dx[ k],j+dy[k],k)连一条边权为0的边,表示从(i,j)在方向为k的情况下能向k方向走一步到达(i+dx…
T组数据,给出N,求出N!最右边非零的数. 对于30%的数据,N <= 30,T<=10. 对于全部的数据,N <= 10^2009,T<=30. 一道数学题 解析 N!/(10^x)最后一位数字即是结果.10^x进行拆分,变成5^x* 2^x.怎么除以5^x呢,好办,乘的时候含有5的倍数的一项全部不乘进去,再递归此过程.即 1 2 3 4 (15) 6 7 8 9 (25) 11 12 13 14 (35)16 17 18 19 (45) 21 22 23 24 (55) 26…
背景 其实 Kano 曾经到过由乃⼭,当然这名字⼀看⼭主就是 Yuno 嘛.当年 Kano 看见了由乃⼭,内⼼突然涌出了⼀股杜甫会当凌绝顶,⼀览众⼭⼩的 豪⽓,于是毅然决定登⼭.但是 Kano 总是习惯性乱丢垃圾,增重环卫⼯⼈ 的负担,Yuno 并不想让 Kano 登⼭,于是她果断在⼭上设置了结界-- 题意 Yuno 为了⽅便登⼭者,在⼭上造了 N 个营地,编号从 0 开始.当结界发动时,每当第 $ i(> 0) $ 号营地内有⼈,那么他将被传送到第 $ A_i (< i) $ 号营 地,如此…
潜入行动 复杂度分析题. 定义状态fi,j,0/1,0/1f_{i,j,0/1,0/1}fi,j,0/1,0/1​表示以iii为根子树放jjj个机器iii这个放不放,iii这个是否已放来进行dpdpdp 可以通过分类讨论证明做树上背包的时间复杂度是O(nk)O(nk)O(nk)的. 代码: #include<bits/stdc++.h> #define ri register int using namespace std; inline int read(){ int ans=0; char…
喵哈哈村的魔法考试 Round #2 (Div.2) 题解 A.喵哈哈村的战争 题解: 这道题就是for一遍,统计每个村子的战斗力的和,然后统计哪个村子的战斗力和大一点就好了. 唯一的坑点,就是这道题会超过int. 不过好像,我的数据好像没有出超过int的数据= = #include<iostream> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int…
持续更新! 基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. ..怎么说呢,最基础的模板我就我不说了吧qwq,具体可以参考一下这位大佬写的博客:最大流,最小割,费用流 费用流 跑最大费用流的时候可以把边权都变成负的,然后按照原先的方法跑最小费用流即可. 每个点只能经过一次的时候,就拆点,然后两个点之间连容量为1费用为0的边.连路径的时候,强制从v'向u连边. 经典费用流模型 连续M个元素最多选K个 给你N个元素,每个元素都有一个权值ai(可正可负),要求从中你选出一些,满足…
搜索+状压+DP. 注意到一个性质:考虑一棵以x为根的子树,在x到原树的根的路径上的点如果都已经确定了方案,那么x的左右儿子的决策就彼此独立,互不影响了.所以我们考虑状压一条路径上每一层节点的状态,求出dp[u][x] : 以u为根的子树中分配x个作战平民的最大收益是多少(注意因为是在dfs当中,所以dp数组存的是在当前状况下的最优解). 代码挺短的,可食用~ #include <bits/stdc++.h> using namespace std; #define maxn 1025 int…
题意 类似于就是背包. 解析 代码 跟解析有点不一样v[i]价值,w[i]重量,s背包容积,背包转移即可. #include<bits/stdc++.h> using namespace std; const int maxn=1e4+5; int n,s,x,y,tot,ans; int v[maxn],w[maxn],dp[maxn]; int main(){ scanf("%d",&n); for(int i=1;i<=n;++i){ scanf(&qu…
题意 dfs骗了30分,一开始想的距离正解差一点啊,贪心加dp就可以过的水题,真正太蒻了 解析 代码 #include<bits/stdc++.h> using namespace std; struct node{ int x; int y; }a[210]; int m,n,k; int f[210][210]; bool book[210]; long long ans; bool cmp(node a,node b){ return a.y>b.y; } int main(){…
题意 类似于涂色问题,环形问题不多说,断环加倍即可,限制条件if判断就行. 解析 代码 #include<bits/stdc++.h> using namespace std; int n,c,p,a[410]; int f[410][410],ans=1<<30; int main(){ scanf("%d %d %d",&n,&c,&p); for(int i=1;i<=n;++i){ scanf("%d",…
有一个邮递员要送东西,邮局在结点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间.这个邮递员每次只能带一样东西.求送完这N-1样东西并且最终回到邮局最少需要多少时间. 很容易发现我们要求 \(\sum_{j=1}^n\) dis[1][ j ]+dis[ j ][1],可以想到跑spfa,对于dis[1][ j ]可以一遍spfa解决但是对于 dis[ j ][1]却不好解决,如果跑n遍spfa明显超…
共t条街对于每一条街上有n个店铺(n可能不相同),每次只能选两端第一个营业的店铺采购,采购第i个店铺会获得幸福度ai,采购完后,这个店铺和它相邻的店铺便会关门,问最大幸福度? 考场想了一下dp,一开始想一维但发现不好处理,二维参数也没有想出来,于是便开始了我的暴力瞎搞之旅,我随手写了几个例子发现对于n为奇数无论怎么采购,幸福度是固定的为a1, a3 , a5........an于是便可以直接累加,然而对于n为偶数又怎么去处理呢?我也随手写了n为6,8,10的数据发现其实就只有三种情况. 第一种情…
题意 跑两边spfa的水题,注意判断有人才取最大值 代码 #include<bits/stdc++.h> using namespace std; inline int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<&…
题意 1到n个自然数中选k个自然数要求两两不相邻,问有多少种方法,模m eg(1 3 5 ) 又是一道打表规律题,正常解法dp可以通过前缀和优化到O(N* K).另外我们可以重新定义F[I,J]表示从1到I中选择J个不连续数的方案数.通过考虑I选还是不选来进行状态转移. 1.如果不选I:则方案数为F[I-1,J]; 2.如果选I:由于不能选相邻两个数,所以I-1不能选,则剩余的J-1个数只能在1到I-2中选,即F[I-2,J-1]; f[i][j]=f[i-1][j]+f[i-2][j-1] (…
题意 如下图所示为一个数字三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 请编程计算从顶至底部某处的一条路径,使该路径所经过的数字的总和最大.约定: (1)每一步可沿直线向下或右斜线向下走: (2)1<=三角形行数<=100: (3)三角形中的数字为整数不超过整型,保证结果也不超过整型. (4)要求必须经过第n/2行.第n/2列这个位置. 一道简单的dp题,我们可以发现在n/2行以后n/2列左边的数是不会被用到的,也就是说我们可以分步dp,将n/2行特判即可 #inclu…
题意 判断是否存在一个序列 $ b_i $ 使得 $ \prod_{i = 1}^{n} b_i  | b_i^{a_i}$ 恒成立,其中 $ b_i $ 中的每个数都是2的正整数次幂. 样例输入 3 2 3 2 3 3 3 3 2 1 10 样例输出 YES YES NO 数据范围 对于 100% 的数据有 $ n \leq 10^5,a_i \leq 10,T \leq 10$ 解析 首先拿到这道题,考场一看就知道不是规律题就是数学公式题,事实上是的. 我们可以设 $ b_i=2^{x_i}…
题意 Alice 和 Mukyu 最近偶然得到了一本写有一种叫做梭哈的扑克游戏的规则的说明书(名为<C████████nd>,中间部分被涂掉了),据其所述,梭哈是一种使用黑桃.红心.梅花.方片的 A 到 K 共 52 张牌(没有大小王)来进行的扑克牌游戏. 不幸的是,规则说明中有关整个游戏的进行方式的部分被撕掉了,Alice 和 Mukyu 从残存的部分只得知了"手牌上限是 5 张"这一消息,所以他们决定每次直接给两人各发 5 张牌,判定谁的手牌比较大,说明书中关于手牌大小…
给你一个最短代码: #include <iostream> #include <string> int main(){ std::string str; std::cin >> str; for(int i = str.length()-2;i >= 0; i--) std::cout << str[i]; } 小细节:str.length()-1减掉的是'\0'哦~…
\(\color{red}{Link}\) \(\text{Solution:}\) 观察到,如果一个时间\(T\)可以完成任务,则\(T+1\)这个时间也可以完成任务. 于是我们可以二分. 为了避免浮点数,我们可以让时间和血量都乘以\(1000.\)注意攻击力不需要增大,因为时间已经扩大了. 考虑如何网络流建模: 首先,我们把问题转化为\(T\)时间能不能解决.于是,我们可以从源点向激光器连一条容量为攻击力乘以时间的边,每个激光器再向机器人连一条容量无限的边,每一个机器人再向汇点连一条容量为血…
题解: 把每个点拆成入点和出点,因为必须经过一次且只能经过一次.所以在两个点之间连一条上界=下界=1的边. 然后再s到每个入点连边,每个出点向t连边,点与点之间... 求最小流就可以过了... (感觉最小流神一般的存在...) 代码: #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> #include<iostre…
2150: 部落战争 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=2150 Description lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧无人居住.lanzerb把自己的部落分成若干支军队,他们约定: 1. 每支军队可以从任意一个城镇…
续.....TAT这回不到50题编辑器就崩了.. 这里塞40道吧= = bzoj 1585: [Usaco2009 Mar]Earthquake Damage 2 地震伤害 比较经典的最小割?..然而一开始还是不会QAQ 和地震伤害1的区别在于这题求的是最少的损坏牧场数目.把牧场拆点,因为要让1和被报告的点不联通,把1归到S集,被报告的点归到T集,就变成求最小割了. 具体建图: 假设点拆成x和x’,x和x‘间连边(就是等下要割的).被报告的点和1点:容量无穷大(不能割):其他点容量为1. 原图中…
[BZOJ3993]星际战争(网络流,二分答案) 题面 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值减少到0或者以下时,这个巨型机器人就被摧毁了.X军团有M个激光武器,其中第i个激光武器每秒可以削减一个巨型机器人Bi的装甲值.激光武器的攻击是连续的.这种激光武器非常奇怪,一个激光武器只能攻击一些特定的敌人.Y军团看到自己的巨型机器…
[BZOJ4007][JLOI2015]战争调度(动态规划) 题面 BZOJ 洛谷 题解 神仙题,我是做不来. 一个想法是设\(f[i][j]\)表示当前考虑到\(i\)节点,其子树内有\(j\)个人选择了打仗的最大贡献. 但是我们发现直接做我们并不会转移,因为我们不知道每个儿子的选择情况. 那么我们直接爆搜这条链上的每个点的情况,这样子到了叶子节点就可以直接转移上去. 而这样子爆搜的条件下,显然一个点的左右两个儿子是独立的,即转移是互不影响的,所以这样子并没有问题. 那么复杂度是什么呢? 我们…
「JLOI2015」骗我呢 题意 问有多少个 \(n \times m\) 的矩阵 \(\{x_{i, j}\}\) 满足 对于 \(\forall i \in [1, n], j \in [1, m]\) 有 \(x_{i, j} \in[0, m]\) : 对于 \(\forall i \in [1, n], j \in [1, m)\) 有 \(x_{i, j} < x_{i, j + 1}\) : 对于 \(\forall i \in (1, n], j \in [1, m)\) 有 \…