首页 > 其他分享 >2024-03-07

2024-03-07

时间:2024-03-07 20:00:42浏览次数:27  
标签:03 le frac 07 int mxs times 2024 depth

2024-03-07

做题

埃及分数

迭代加深搜索

两层迭代:单位分数的个数 \(depth\) 和最大的分母 \(mxs\)
推枚举的当前分母 \(p\) 的上下界:

  • \(\frac{1}{p}\le \frac{a}{b}\) 即 \(p \ge \frac{b}{a}\)
  • 每一个单位分母不相同,所以 \(p \ge last\)
  • 要在后面 \(depth-k+1\) 个分数凑出当前的 \(\frac{a}{b}\) 每个最大是 \(\frac{1}{p}\),所以

\[\frac{depth-k+1}{p} \ge \frac{a}{b} \]

\[p \le \frac{b\times (depth-k+1)}{a} \]

  • 要保证当前选了 \(p\) 之后,剩下的 \(depth-k\) 个单位分数还有的选,即

\[\frac{a}{b} - \frac{1}{p} \ge \frac{depth-k}{mxs} \]

解得

\[p \ge \frac{b\times mxs}{a\times mxs-b\times (depth-k)} \]

综上

\[p\in [\max(last,\frac{b\times mxs}{a\times mxs-b\times (depth-k)},\frac{b}{a}),\min(S,\frac{b\times (depth-k+1)}{a})] \]

还有优化:只剩最后两个分数的时候 \((k=depth-1时)\) 的特殊情况

设最后两个单位分数分母为 \(x, y\) ,则 \(\frac{a}{b}=\frac{1}{x}+\frac{1}{y}\)
整理得

\[\begin{cases} &a\times z=x+y \\ &b\times z=x\times y \end{cases} \]

由韦达定理将 \(x, y\) 转化为一元二次方程 \(x^2-azx+bz\) 的两个不等实根
令 \(\Delta = a^2z^2-4bz, s=\sqrt{\Delta}\)

\[x=\frac{az-\sqrt{\Delta}}{2},y=\frac{az+\sqrt{\Delta}}{2} \]

枚举 \(z\) ,判断 \(\Delta\) 是否是平方数,再判断 \(az+\sqrt{\Delta}\) 是否是偶数即可

求 \(z\) 的范围:

\[az=x+y,bz=xy \\ x, y\le S \\ \therefore az \le 2\times S,bz \le S^2 \\ \therefore z \le min(\frac{2S}{a},\frac{S^2}{b}) \]

统计答案:
当 \(k=depth\) 时,判断 \(a\) 是否等于 \(1\),\(b\) 是否大于 \(last\) ,再比较全局答案数组的 \(ans_k\) 和 当前存的答案数组的 \(tmp_k\) 比较,若当前更小,更新答案

k短路

A*算法

A* 是 dijkstra 的升级版
建反图跑一边最短路,求出每个点的 启发函数 \(h\)
再正着bfs,设从起点到当前点的距离为 \(g\) ,估价函数为 \(f=g+h\)
把节点加入优先队列,每次取出 \(f\) 值最小的节点更新其它点
第 \(k\) 次经过终点时就是 k短路

Tips:

  • vector可以直接比较字典序的大小

数列分块入门2

题目描述:给出一个长为 \(n\) 的数列,以及 \(n\) 个操作,操作涉及区间加法,询问区间内小于某个值 \(x\) 的元素个数。

块内排好序,存排完序之后的位置用于单点加
整块的直接加到 tag 上,边角暴力加,然后重新排这一块的序
查询的时候块内 lower_bound 边角暴力查

代码

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>

using namespace std;

const int N=50050;
const int Inf=2e9;

int n;
int len;
pair<int,int> w[N];
int blk[N],pos[N],tag[N];
int lft[N],rgh[N];

int lwrbnd(int l,int r,int x) {
	l--,r++;
	while(r-l>1) {
		int m=l+r>>1;
		if(w[m].first<x) l=m;
		else r=m;
	}
	return l+1;
}

int main() {
	scanf("%d",&n);
	len=sqrt(n);
	for(int i=1;i<=n;i++) blk[i]=(i-1)/len+1,lft[blk[i]]=Inf,rgh[blk[i]]=-Inf;
	for(int i=1;i<=n;i++) lft[blk[i]]=min(lft[blk[i]],i),rgh[blk[i]]=max(rgh[blk[i]],i);
	for(int i=1;i<=n;i++) scanf("%d",&w[i].first),w[i].second=i;
	for(int i=1;i<=(n-1)/len+1;i++) sort(w+lft[i],w+rgh[i]+1);
	for(int i=1;i<=n;i++) pos[w[i].second]=i;
	for(int o=1;o<=n;o++) {
		int opt,l,r,x;
		scanf("%d%d%d%d",&opt,&l,&r,&x);
		if(opt==0) {
			for(int i=l;i<=min(r,rgh[blk[l]]);i++) w[pos[i]].first+=x;
			sort(w+lft[blk[l]],w+rgh[blk[l]]+1);
			for(int i=lft[blk[l]];i<=rgh[blk[l]];i++) pos[w[i].second]=i;
			if(blk[l]!=blk[r]) {
				for(int i=lft[blk[r]];i<=r;i++) w[pos[i]].first+=x;
				sort(w+lft[blk[r]],w+rgh[blk[r]]+1);
				for(int i=lft[blk[r]];i<=rgh[blk[r]];i++) pos[w[i].second]=i;
			}
			for(int i=blk[l]+1;i<blk[r];i++) tag[i]+=x;
		}
		else {
			x=x*x;
			int ans=0;
			for(int i=l;i<=min(r,rgh[blk[l]]);i++) if(w[pos[i]].first<x-tag[blk[l]]) ans++;
			if(blk[l]!=blk[r]) for(int i=lft[blk[r]];i<=r;i++) if(w[pos[i]].first<x-tag[blk[r]]) ans++;
			for(int i=blk[l]+1;i<blk[r];i++) ans+=(lwrbnd(lft[i],rgh[i],x-tag[i])-lft[i]);
			printf("%d\n",ans);
		}
	}
	
	return 0;
} 

标签:03,le,frac,07,int,mxs,times,2024,depth
From: https://www.cnblogs.com/Orange-Star/p/18059645

相关文章

  • 2024 联合省选游记
    摘要:考前别做去年的题,因为你会觉得去年的自己是个若智。day1登顶了大家回来膜你,你的压力会很大导致day2寄掉。考后别去补题,因为你会觉得场上的自己是个若智。day0因为去年省选day2生病的阴影一直存在,所以拒绝了一切面基(试机,没有selfeval,差评。选了三台电脑测了一......
  • 20240307正则表达式对常见字段的校验
    验证固话号码//表示以0开头,后跟2到3位数字,然后是-,最后是7到8位数字。publicstaticbooleancheckPhoneNumber(StringphoneNumber){if(StringUtils.isEmpty(phoneNumber)){returnfalse;}Patternpattern=Pattern.co......
  • 3121000389
    这个作业属于哪个课程软件工程2024-双学位(广东工业大学)这个作业要求在哪里软件工程第一次作业这个作业的目标建立个人技术博客加入博客园班级学习使用Markdown文本语法撰写博客准备一个GitCode账号、上传代码其他参考文献无目录一、评估当前的自己简历......
  • 2024 年春节集训 _ 第二课 - 莫比乌斯反演
    练习\(5\)\(\color{orange}{\texttt{E->link}}\)求\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\]\(n,m\leq10^7,\T\leq10^4\)贴个照片。及其丑陋的照片(我的草稿)如上化简最后可以得到\[\sum_{d=1}^nd\sum_{k=1}^{\left[\dfrac{n}{d}\right]}\mu(k)k^2\......
  • [游记] ZJOI2024 游记
    Day0最紧张的一天。一切都很如梦初醒,甚至很难接受“也许是最后一场比赛”了呢。一反往常地开始写模板,开始看之前看过的题,开始阅读很多考前Reminder。一切的一切似乎都带上了很多沉重感……身边的每个人对自己说的话都渲染着一种风暴之前低气压的氛围。早早理好了第二天的......
  • day57 动态规划part14 代码随想录算法训练营 1035. 不相交的线
    题目:1035.不相交的线我的感悟:换汤不换药理解难点:换了个壳子听课笔记:多理解这个题意我的代码:classSolution:defmaxUncrossedLines(self,nums1:List[int],nums2:List[int])->int:#因为强调顺序,所以跟1143最长公共子序列是一样的dp......
  • Though Our Paths May Diverge(JSOI 2024 游记)
    Isn’titsupposedtobesunnynow?且当是JSOI2024的游记吧。省选前的精神状态处于一种微妙的平衡。确实也不断在给自己心理暗示,自己有省队水平,但是其实无论是哪边的模拟打得都属于比较稀烂的水平,有的时候真的是一题不会签不上到。跟不上zhy和黄色蜜蜂的节奏啊,大概就......
  • HNOI 2024游记
    HNOI2024游记总的来说,感觉两天基本上发挥出了自己的水平,虽然挂了分,但是挂的分不多,所以勉强在省队线上。得分:\(100+20+32+100+30+0=282\)day0这一天之前的培训基本上就是在打模拟赛和该题,然后也做了一些好题,模拟赛的时候感觉每一天都有很多同学比我的分高很多,感觉大家都非常......
  • 2024年“ENVI/SARscape遥感应用培训班(7城市)”启动计划
    传递遥感技术助力遥感应用2024年“ENVI/SARscape遥感应用培训班(7城市)”启动计划 每一站会提前通知,详细信息及报名方式请关注:微信公众号:ENVI技术殿堂(右侧二维码)博客:https://envi.geoscene.cn/blog邮箱:[email protected]热线:400-819-2281转4......
  • Salesforce 2024财年爆发式增长!第一次现金分红
    对于Salesforce来说,这是非凡的转型之年,所有的关键指标都表现强劲,现金流和利润增长创下了纪录。截至第四季度末,Salesforce的剩余履约价值(RPO)总额为569亿美元,同比增长17%。MarcBenioffSalesforce启动了有史以来第一次分红,并将股票回购计划增加100亿美元。凭借统一Einstein1平......