首页 > 其他分享 >2024.2.19

2024.2.19

时间:2024-02-19 15:33:33浏览次数:19  
标签:10 2024.2 le 障碍物 19 int ch define

Bear and Paradox

你在打比赛,题 \(i\) 的初始分值为 \(a_i\),须时间 \(t_i\) 做出,在时间 \(x\) 做出题 \(i\) 的得分为 \(b_i=a_i\cdot (1-c\cdot \frac{x}{T})\),其中 \(c\) 为 \([0,1]\) 间的常数,\(T=\sum t_i\)。

找到最大的 \(c\),使得在所有总得分最大的情况下, \(\not\exist (i,j)\),有 \(a_i>a_j\) 且 \(b_i<b_j\)。

\(n\le 1.5\times 10^5\),\(1\le a_i,t_i\le 10^8\),精度要求 \(10^{-6}\)。


调整法可得 \(\dfrac{a_i}{t_i}\) 大的排在前面。问题是我们要将 \(\dfrac{a_i}{t_i}\) 相同的排序以构造最劣解。

然后乱搞发现把最大的放在最后面,次大的放在第一个就好了,这是可以感性理解的。

二分 \(c\),时间复杂度 \(O(n\cdot |\log \epsilon|)\),我脑抽加了个 BIT 也是没啥问题的。

#include<bits/stdc++.h>
#define ll long long
#define db double
#define N 200010
#define eps 1e-8
#define pii pair<int,int>
#define fi first
#define se second
#define mp make_pair
using namespace std;
int read(){
	int x=0,w=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
	while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
	return x*w;
}
struct dat{
	int a,t;
	bool operator<(const dat &x)const{
		return 1ll*a*x.t>1ll*x.a*t;
	}
}b[N];
int n;ll T;
db s[N];int a[N],t[N];
priority_queue<pii>q;
struct BIT{
	#define lb(x) x&-x
	db c[N];
	void clr(){for(int i=0;i<=n;i++)c[i]=0;}
	void add(int x,db k){
		for(;x<=n;x+=lb(x))c[x]=max(c[x],k);
	}
	db qry(int x){
		db ret=0;
		for(;x;x-=lb(x))ret=max(ret,c[x]);
		return ret;
	}
}B;
int tp[N],len,aa[N];
void lsh(){
	for(int i=1;i<=n;i++)tp[i]=a[i];
	sort(tp+1,tp+1+n),len=unique(tp+1,tp+1+n)-tp-1;
	for(int i=1;i<=n;i++)
		aa[i]=lower_bound(tp+1,tp+1+len,a[i])-tp;
}
bool check(db c){
	c/=T;ll sum=0;B.clr();
	for(int i=1;i<=n;i++){
		sum+=t[i],s[i]=(db)a[i]*(1.0-c*sum);
		B.add(aa[i],s[i]);
	}
	for(int i=1;i<=n;i++)
		if(B.qry(aa[i]-1)>s[i])return false;
	return true;
}
int main(){
	n=read();
	for(int i=1;i<=n;i++)b[i].a=read();
	for(int i=1;i<=n;i++)T+=(b[i].t=read());
	sort(b+1,b+1+n);
	q.push(mp(b[1].a,b[1].t));
	for(int i=1,l=1;i<=n;i++){
		while(i<n&&1ll*b[i].a*b[i+1].t==1ll*b[i].t*b[i+1].a)
			q.push(mp(b[i+1].a,b[i+1].t)),i++;
		a[i]=q.top().fi,t[i]=q.top().se,q.pop();
		if(!q.empty())a[l]=q.top().fi,t[l]=q.top().se,q.pop();
		for(int j=l+1;j<i;j++)
			a[j]=q.top().fi,t[j]=q.top().se,q.pop();
		l=i+1,q.push(mp(b[l].a,b[l].t));
	}
	lsh();
	db l=0,r=1,mid,ans=0;
	while(l+eps<r){
		mid=(l+r)/2.0;
		if(check(mid))ans=mid,l=mid;
		else r=mid;
	}
	printf("%.10lf\n",ans);

	return 0;
}

JZOJ 6701. 旅行

你在极大二维平面上移动,要从 \((sx,sy)\) 到 \((tx,ty)\)。

有 \(n\) 个矩形障碍物,左下角 \((a_i,b_i)\),右上角 \((c_i,d_i)\)。障碍物间不交且无公共点。

你只能平行于坐标轴移动,不能进入障碍物,但可以沿着障碍物边缘行动。问最少步数。

\(n\le 2\times 10^5\),\(0\le sx,sy,tx,ty,a_i,b_i,c_i,d_i\le 10^8\),所有横坐标两两不同,所有纵坐标两两不同。


JZOJ 6702. 仙人掌

求仙人掌的邻接矩阵的行列式的值。

\(n\le 10^5\),\(m\le 2\times 10^5\)。

标签:10,2024.2,le,障碍物,19,int,ch,define
From: https://www.cnblogs.com/SError0819/p/18021228

相关文章

  • 从嘉手札<2024-2-19>
    人一旦设立目的就会本能的去摆脱目的达不到的痛苦感于是陷入了不断为目的服务的恶性循环而这个目的本身不需要有任何实质意义一个真正理性的人首先不敢保证自己的结论完全正确其次,他探索真理只是为了真理本身,而不是为了证明自己;最后,他不会轻易争论,除非对手和他是同一种人......
  • P1012 [NOIP1998 提高组] 拼数
    题目 源代码一、错误示范1//去比较最高位数字的大小,大的在前面(ASCII比较)2//使用字符串存储多个数字3#include<iostream>4#include<algorithm>5usingnamespacestd;6structstu7{8strings;9}student[25];10boolcmp(stua,stub)11{......
  • 海亮02/19杂题
    海亮02/19杂题个人题单T5link题意设一个数组\(a_{1,2,\dots,l}\)是平衡的,当且仅当\(\existsk\in[1,\frac{l-1}{2}],\foralli\in[1,l-2\timesk],a_{i}+a_{i+2\timesk}=2\timesa_{i+k}\)。现在给你一个数组\(a\),你需要对\(\foralll\in[1,n]\)求出子序列......
  • centos 7安装sql server 2019
    1.下载安装包: 参考地址:https://packages.microsoft.com/rhel/7/mssql-server-2019/mssql-server-15.0.4083.2-15.x86_64.rpm 找一个自己喜欢的版本,下载下来。或者找大神们的百度网盘也行。2.将文件拷贝到虚拟机目录,运行如下命令开始安装。 3.安装的时候出现缺少依赖包,使......
  • 2024.2.18 捶打我天然的沉默 切割我卑微与困惑
    今天是DS选讲,理解了大部分内容,还有一些自己口胡了,很好。ARC打的有点难受,因为电脑有点稀碎(指编译1min+),机房的电脑又用不习惯。具体表现为会E差一点过,可惜。CF713CSonyaandProblemWihtoutaLegendslopetrick入门题。具体的,写出DP会发现只需要支持取前缀min,加入......
  • 2024.2.18 近期练习
    P4764值域为\([l,r]\)的生成森林,也就是把值\(\gel\)的边拿出来生成森林,其中边\(\ler\)的权值和。我们现在要求所有\(l\),$\gel$边的生成森林中边有哪些。考虑从大往小加边,设当前加入第条边\((u,v,w)\)。因为这条边最小,所以这条边必选。若\(u,v\)不连通,那么直接......
  • 惠普HP519打印机缺色处理记录
    打印蓝色缺失开盖检查,发现蓝色墨水管路中间有断线,拆开打印头后,用随机器配的桔红色吸墨器吸墨.之后重新开机还是缺色.检查彩色打印头,用浅浅的一层热水泡下方喷嘴,黄色红色出墨明显,蓝色几乎没颜色,于是用针管从入口注入一些蓝色墨水,再用另一个针管拆掉针头后,套上......
  • (2024.2.5-2024.2.18)C语言学习小结
    这两周主要围绕《HeadfirstC》这本书展开C语言学习,同时尝试学习DES密码算法C程序。基本内容《HeadfirstC》学习的内容基本上就是进程与通信、网络、线程这块。以下是思维导图:实践练习除了书上的一些小练习之外,我也实践写了HFC的C语言实验室2的程序,一波三折,详见C代码......
  • CF1929 Codeforces Round 926 (Div. 2)
    C.SashaandtheCasino当\(k<x\)时,显然我们只需要每次下注一个硬币就好了.当\(k>x\)时.考虑先一个一个的下硬币,那么为了保证不亏本,最多输\(k-2\)局,然后在第\(k-1\)局赢,这样才能盈利\(1\)个硬币.那么在第\(k\)局之后呢?此时我们最少也需要下注两个硬币,这......
  • Q:Oracle表空间使用权限错误:ORA-01950
    使用A用户账号(默认表空间tablespace_A),A用户表中插入数据报错ORA-01950报错处理方法:方法1:授予用户A unlimitedtablespace权限grantunlimitedtablespacetoA;方法2:分配表空间使用配额alteruserAquotaunlimitedontablespace_A;注意:unlimitedtablespace可以对......