首页 > 其他分享 >「题解」Codeforces 1612F Armor and Weapons

「题解」Codeforces 1612F Armor and Weapons

时间:2022-11-05 14:22:41浏览次数:64  
标签:Armor 题解 复杂度 Codeforces Weapons 套件 fl

首先可以不管套件,假定 \(n<m\),那么答案不超过 \(\mathcal{O}(\log n+\frac{m}{n})\),也就是先倍增把 \(n\) 造出来,然后一步步造 \(m\).

答案这么小,那么常见的套路就是把答案放进复杂度里。

然后考虑一个 dp,假设当且在第 \(o\) 轮,令 \(f_i\) 为手中最牛逼的盔甲是 \(i\),能够拿到最牛逼的武器是 \(f_i\),想要 dp 出第 \((o+1)\) 轮的 \(f'\).

不用套件的转移,购买盔甲是 \(f'_j\gets f_i,i\leq j\leq i+f_i\),购买武器是 \(f'_i\gets f_i+i\).

用套件的话,那么一定是用 \(i\) 和 \(f_i\),要不然不会更优,所以也能类似转移。

通过打 tag 然后从后往前取 max 可以做到单次 \(\mathcal{O}(n)\) 转移,那么时间复杂度就是 \(\mathcal{O}(n\log n+m)\).

const int N=200010;

int n,m,q,x,y,ans,f[N],g[N],fl;
map<int,int>vis[N];

void solve(){
	read(n,m,q);
	if(n>m)swap(n,m),fl=1;
	while(q--)read(x,y),fl?swap(x,y),0:0,vis[x][y]=1;
	f[1]=1;
	for(;f[n]<m;++ans){
		for(int i=1;i<=n;i++)if(f[i]){
			int k=vis[i][f[i]];
			cmax(g[min(n,i+f[i]+k)],f[i]);
			cmax(g[i],min(m,i+f[i]+k));
		}
		for(int i=n;i>=1;i--)f[i]=max(g[i],f[i+1]),g[i]=0;
	}
	cout << ans << '\n';
}

标签:Armor,题解,复杂度,Codeforces,Weapons,套件,fl
From: https://www.cnblogs.com/do-while-true/p/16860107.html

相关文章

  • 问题解决:vscode运行python找不到文件
    问题描述:使用VSCode执行Python代码调用其他文件时报FileNotFound错误,终于发现是VSCode工作路径默认是当前文件所在工作区的根目录,而不是当前文件所在目录。发生条件:根......
  • 「题解」牛客练习赛105 F 胖头鱼头胖
    先对每个位置\(i\)对集合幂级数\(x^0+x^1+\cdots+x+x^{a_i}\)FWT,那么询问就是将区间里面所有FWT后的集合幂级数作点积再IFWT后提取\(x^s\)的系数。首先可以通......
  • P2484 [SDOI2011]打地鼠 题解
    P2484[SDOI2011]打地鼠题解目录P2484[SDOI2011]打地鼠题解题目分析思路代码题目P2484[SDOI2011]打地鼠题解分析锤子每次只能将每个洞里打掉一只地鼠,所以对于每......
  • P7365 [CTSC2002]颁奖典礼 题解
    一道神奇的有关网格的DP(一些大佬称其为暴力DP)。这里将“I”字母分为的三个部分称为第一,二,三部分。做法:设fi,j,k,l(l∈[1,3])表示第i行,当前在第l部分,区间[j,k]的......
  • 矩阵树定理学习笔记 & 洛谷 P4111 [HEOI2015]小 Z 的房间 题解
    矩阵树定理拉普拉斯矩阵无边权设无向图\(G\)有\(n\)个结点,则拉普拉斯矩阵\(L\)是一个\(n\timesn\)的矩阵,满足:\(L_{i,i}(i\inG)\)的值为结点\(i\)的度数......
  • 【题解】Luogu P8743 【[蓝桥杯 2021 省 A] 异或数列】
    最近刚好在刷博弈论,看到这道题没有题解,所以刚好来水一发题目链接[蓝桥杯2021省A]异或数列题目描述Alice和Bob正在玩一个异或数列的游戏。初始时,Alice和Bob......
  • Atcoder Beginner Contest ABC 275 Ex (H) Monster 题解
    先明确\(a_i\)是一个怪物的血量,\(b_i\)是攻击的代价。发现如果我们想攻击一个怪物,不如找出一个极大的包含它的区间,满足这个区间内所有怪物的攻击代价都不大于它本身的代价,......
  • 【题解】洛谷 P1134 [USACO3.2]阶乘问题
     1#include<iostream>2usingnamespacestd;34intmain(){5intn;6cin>>n;7intc=1,a=0,b=0;8for(inti=1;i......
  • LG4026 [SHOI2008]循环的债务 题解
    LG4026[SHOI2008]循环的债务给出三个整数\(x_1,x_2,x_3\)。\(x_1\)代表A欠B的钱数,\(x_2\)表示B欠C的钱数,\(x_3\)表示C欠A的钱数。接下来\(3\)行,每......
  • WiredTiger引擎编译 及 LT_PREREQ(2.2.6)问题解决
    近期需要为异构引擎做准备,wiredtiger以其优异的性能(B-tree和LSM-tree都支持)和稳定性(Mongodb的默认存储引擎)被我们备选为异构引擎里的一个子引擎,后续将深入wiredtiger......