首页 > 其他分享 >闲话 22.9.30

闲话 22.9.30

时间:2022-09-30 20:55:50浏览次数:92  
标签:tmp 二分 宝贝 闲话 rep 30 wqs mid 22.9

闲话

现在是8:00
我一个字没写
我就看我什么时候能写完这博客
现在是 8:40
我水完了

关于某个奇怪的题单
某个奇怪的人突然就给我了
说“我没写题解 你要继承我的遗志 把这里面的题都写了题解”
然后 ta 就 *** 了
然后我就开贺了

于是似乎最近不闲的闲话部分有话题了
希望能一天一道
“贺就完了”,某个奇怪的人说


図鑑に載ってた宇宙の話を

毎日読んでいた

最後のページに

世界の真理があると思っていた

でも時間が経って大きくなって

だんだん大人の匂いになって

そんなことは諦めた

杂题

CF739E

你要抓神奇宝贝!现在一共有 \(n\) 只神奇宝贝。
你有 \(a\) 个『宝贝球』和 \(b\) 个『超级球』。
『宝贝球』抓到第 \(i\) 只神奇宝贝的概率是 \(p_i\),『超级球』抓到的概率则是 \(u_i\)。
不能往同一只神奇宝贝上使用超过一个同种的『球』,但是可以往同一只上既使用『宝贝球』又使用『超级球』(都抓到算一个)。
请合理分配每个球抓谁,使得你抓到神奇宝贝的总个数期望最大,并输出这个值。

\(n \leq 10^5\)。

solution1

考虑一个dp。平凡地,我们设 \(f[i][j][k]\) 表示抓了前 \(i\) 只神奇宝贝,用了 \(j\) 只普通球, \(k\) 只超级球。然后 \(O(n^3)\) 转移。
考虑一个优化。我们应该压掉一维,使得转移速度加快。这就让我们想到了什么?wqs二分。
经过打表 严密的证明和足够多的表 证明,这个dp在 \(k\) 维上是凸的。
证当然也可以证了:当 \(i,j\) 相同时,第一只超级球肯定抓期望最大的神奇宝贝,第二只抓次大……类推可证。
然后我们发现这个玩意在 \(j\) 维上也是凸的。

考虑wqs二分。我们首先让每个超级球有自己的花费,内层再让普通球有个自己的花费
然后wqs二分套wqs二分 写就完了

复杂度 \(O(n \log^2 n)\)

solution2

wqs二分
定义斜率k为使用超级球时多加的花费
然后二分斜率 每次扫一遍所有宝可梦,看如何选择

  1. 我都要!p + q - pq - k
  2. 只用干脆面 p
  3. 只用豆干 q - k
  4. 滚蛋! 0

于是考虑每只宝可梦什么情况下是否选超级球
max(p + q - pq - k, p) - max(q - k, 0)
即为答案的变化量
内层sort一下选最优答案就行,复杂度 \(O(n \log^2 n)\)

题解说可以分讨避免内层排序
因此做到 \(O(n \log n)\)

code[solution2]
#include <bits/stdc++.h>
#define N 100005
#define rep(i,a,b) for ( register int (i) = (a); (i) <= (b); ++(i) )
#define pre(i,a,b) for ( register int (i) = (a); (i) >= (b); --(i) )
using namespace std;
double ans, p[N], q[N];
int n, a, b;

struct node {
	int a0, a1;
	// 用第一种/第二种粮与否
	double x;
	// 在此情况下当前wqs二分扰动后的可能性
	bool operator < (const node & b) const {
		return x > b.x;
	}
} tmp[N];

bool check(double k) {
	int c = 0; ans = 0;
	rep(i,1,n) {
		if (p[i] > p[i] + q[i] - p[i] * q[i] - k) tmp[i].a1 = 0, tmp[i].x = p[i];
		else tmp[i].a1 = 1, tmp[i].x = p[i] + q[i] - p[i] * q[i] - k;
		if (q[i] - k < 0) tmp[i].a0 = 0;
		else tmp[i].a0 = 1, tmp[i].x -= q[i] - k, ans += q[i] - k;
	} sort(tmp+1, tmp+1+n);
	rep(i,1,a) c += tmp[i].a1, ans += tmp[i].x;
	rep(i,a+1, n) c += tmp[i].a0;
	return c < b;
}

signed main() {
	cin >> n >> a >> b; 
	rep(i,1,n) cin >> p[i];
	rep(i,1,n) cin >> q[i];
	double l = 0, r = 1, mid = 0;
	while (r - l >= 1e-11) {
		mid = (l + r) / 2;
		if (check(mid)) {
			r = mid;
		} else l = mid;
	} printf("%.6lf", ans + b * mid);
	return 0;
}

标签:tmp,二分,宝贝,闲话,rep,30,wqs,mid,22.9
From: https://www.cnblogs.com/joke3579/p/chitchat220930.html

相关文章

  • 【2022-09-30】DRF从入门到入土(五)
    DRF视图继承关系表链接https://www.processon.com/embed/60dec4091e085359888e3e722个视图基类#之前写的5个接口,我们都是继承APIView#还可以继承GenericAPIView:它......
  • Android Studio运行Failed to find Build Tools revision 30.0.3
    问题第一次安装好AndroidStudio2022.5的版本之后开启虚拟机运行文件报错提示FailedtofindBuildToolsrevision30.0.3打开SDK已经安装了33.0.0,报错提示找不到30.......
  • 9.30
    今日内容1.字典相关操作2.元组相关操作3.集合相关操作4.字符编码理论5.字符编码实操1.字典相关操作1.类型转换 dict() 字典的转换一般不使用关键字而是自己动手......
  • 9月30日内容总结——数据类型内置方法剩余部分(字典、元组、集合)、字符编码的概念及使
    目录一、字典的内置方法1、类型转换(把其他类型转换成自己的类型)2、取值3、修改数据值4、增加数据值5、删除数据值1.del方法2.pop方法6、统计字典中键值对的个数7、字典三......
  • idea激活2022.9.30
    2022.9.30亲测有效地址:​​激活地址​​F5TRIB85C7-eyJsaWNlbnNlSWQiOiJGNVRSSUI4NUM3IiwibGljZW5zZWVOYW1lIjoiU2hhbmRvbmcgVW5pdmVyc2l0eSIsImFzc2lnbmVlTmFtZSI6ImFvIGxp......
  • postman 自动重定向地址问题, 301 Moved Permanently
    最近公司在对接一家英国的服务商接口地址为:https://XXX.app/API?testMode=1在对接这家公司的api接口的时候遇到了一点问题,甚是头疼,现在就把经历记录下来当我在调试......
  • 20220930 英文单词
    10TipstoBeaBetterCo-Workerhttps://work.chron.com/10-tips-better-coworker-2715.html 1、inandofitself表示从事物的本身来看,不考虑其他方面。 2、Don......
  • 不扒瞎,这个程序让我从300s优化到了10s
    前天晚上加班完成部门Q4KPI考核计划后,看到业务开发组的几个小伙伴在处理生产问题。我上前了解情况。 销管系统,客户交易明细页面,查询客户交易数据的逻辑是:调用远程数据中......
  • UVA1630 串折叠 Folding
    串折叠Folding题面翻译题目描述折叠由大写字母组成的长度为\(n\)(\(1\leqslantn\leqslant100\))的一个字符串,使得其成为一个尽量短的字符串,例如AAAAAA变成6(A)。这......
  • 2022-09-30 数据源对象,容器
    目录spring数据源对象管理DruidDataSourceComboPooledDataSource加载properties文件容器创建容器获取bean核心容器总结容器相关bean相关依赖注入相关spring数据源对象管......