首页 > 其他分享 >ybtoj——倍增问题

ybtoj——倍增问题

时间:2024-11-15 16:21:41浏览次数:1  
标签:ch int ybtoj al 问题 -- abs ga 倍增

A:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n[N];
int m,mm,nn;

int main()
{
	scanf("%d%d",&m,&nn);
	for(int i=1;i<=m;i++){
		cin>>n[i];
		
	}
	while(nn--){
		scanf("%d",&mm);
		int ans=0;
		for(int i=20;i>=0;i--)
		{
			
			if(ans+(1<<i)<=m){
				if(n[ans+(1<<i)]< mm){
					ans+=1<<i;
					
					
				}
			}
			
		}
		if(n[ans+1]==mm && ans <m) printf("%d ",ans+1);
		else printf("-1 ");
		
	}
	return 0;
}

B:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+200,INF=2e9;
struct City
{
	int id,al;//identifier,altitude
	friend bool operator < (City a,City b)
    {
        return a.al<b.al; 
    }
};
int n,m,x0,la,lb,ansid;
int h[N],s[N],x[N];
int f[20][N][5],da[20][N][5],db[20][N][5];
double ans=INF*1.0;
multiset<City> q;
void calc(int S,int X)
{
	int p=S;
	la=0,lb=0;
	for(int i=18;i>=0;i--)
		if(f[i][p][0] && la+lb+da[i][p][0]+db[i][p][0]<=X)
		{
			la+=da[i][p][0];
			lb+=db[i][p][0];
			p=f[i][p][0];
		}
}
void pre()
{
	h[0]=INF,h[n+1]=-INF;
	City st;//start
	st.id=0,st.al=INF;
	q.insert(st),q.insert(st);
	st.id=n+1,st.al=-INF;
	q.insert(st),q.insert(st);
	for(int i=n;i;i--)
	{
		int ga,gb;
		City now;
		now.id=i,now.al=h[i];
		q.insert(now);
		set<City>::iterator p=q.lower_bound(now);
		p--;
		int lt=(*p).id,lh=(*p).al;//last
		p++,p++;
		int ne=(*p).id,nh=(*p).al;//next
		p--;
		if(abs(nh-h[i])>=abs(h[i]-lh))
		{
			gb=lt;
			p--,p--;
			if(abs(nh-h[i])>=abs(h[i]-(*p).al))
				ga=(*p).id;
			else
				ga=ne;
		}
		else
		{
			gb=ne;
			p++,p++;
			if(abs((*p).al-h[i])>=abs(h[i]-lh))
				ga=lt;
			else
				ga=(*p).id;
		}//2、预处理
		f[0][i][0]=ga,f[0][i][1]=gb;
		da[0][i][0]=abs(h[i]-h[ga]);
		db[0][i][1]=abs(h[i]-h[gb]);//3、DP初值
	}
	for(int i=1;i<=18;i++)
		for(int j=1;j<=n;j++)
			for(int k=0;k<2;k++)
				if(i==1)
				{
					f[1][j][k]=f[0][f[0][j][k]][1-k];
					da[1][j][k]=da[0][j][k]+da[0][f[0][j][k]][1-k];
					db[1][j][k]=db[0][j][k]+db[0][f[0][j][k]][1-k];	
				}
				else
				{
					f[i][j][k]=f[i-1][f[i-1][j][k]][k];
					da[i][j][k]=da[i-1][j][k]+da[i-1][f[i-1][j][k]][k];
					db[i][j][k]=db[i-1][j][k]+db[i-1][f[i-1][j][k]][k];
				}//3、倍增优化DP
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		scanf("%d",&h[i]);
	cin>>x0>>m;
	for(int i=1;i<=m;i++)
		scanf("%d%d",&s[i],&x[i]);//1、输入
	pre();
	for(int i=1;i<=n;i++)
	{
		calc(i,x0);
		double nowans=(double)la/(double)lb;
		if(nowans<ans)
		{
			ans=nowans;
			ansid=i;
		}
		else
			if(nowans==ans && h[ansid]<h[i])
				ansid=i;
	}
	cout<<ansid<<endl;//4、求解问题1
	for(int i=1;i<=m;i++)
	{
		calc(s[i],x[i]);
		printf("%d %d\n",la,lb);
	}//5、求解问题2
	return 0;
}

C:

点击查看代码
#include<bits/stdc++.h>
using namespace std;

inline int read(){
	int nb=0,f=1;
	char c=getchar();
	while(c>'9' || c<'0'){
		if(c=='-') f=-f;
		c=getchar();
	}
	while(c>='0' && c<='9'){
		nb=(nb<<3)+(nb<<1)+c-'0';
		c=getchar();
	}
	return nb*f;
}

int n,m,u,v;
int f[66][66][88],g[66][88];

int main(){
	n=read(),m=read();
	memset(g,0x3f,sizeof(g));
	for(int i=1;i<=m;i++){
		u=read(),v=read();
		f[u][v][0]=1;
		g[u][v]=1;
	}
	for(int p=1;p<=64;p++){
		for(int k=1;k<=n;k++){
			for(int i=1;i<=n;i++){
				for(int j=1;j<=n;j++){
					if(f[i][j][p-1]==1 && f[j][k][p-1]==1){
						f[i][k][p]=1;
						g[i][k]=1;
					}
				}
			}
		}
	}
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				g[i][k]=min(g[i][k],g[i][j]+g[j][k]);
			}
		}
	}
	cout<<g[1][n]<<"\n";
	return 0;
}

D:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
	int nb=0,f=1;
	char c=getchar();
	while(c>'9' || c<'0'){
		if(c=='-') f=-f;
		c=getchar();
	}
	while(c>='0' && c<='9'){
		nb=(nb<<3)+(nb<<1)+c-'0';
		c=getchar();
	}
	return nb*f;
}
const int N=2e5;
int d[N][40],mi[N][40];
int n;
long long s[N][40],k;

signed main(){
	n=read(),k=read();
	for(int i=1;i<=n;i++){
		int x=read();
		x++;
		d[i][0]=x;
	}
	for(int i=1;i<=n;i++){
		int x;
		x=read();
		s[i][0]=mi[i][0]=x;
	}
	for(int j=1;j<=34;j++){
		for(int i=1;i<=n;i++){
			d[i][j]=d[d[i][j-1]][j-1];
			s[i][j]=s[i][j-1]+s[d[i][j-1]][j-1];
			mi[i][j]=min(mi[i][j-1],mi[d[i][j-1]][j-1]);
		}
	}
	for(int i=1;i<=n;i++){
		int now=i,mii=2147483646;
		long long sum =0;
		for(int j=0;j<=34;j++){
			if(k&(1ll<<j)){
				sum+=s[now][j];
				mii=min(mii,mi[now][j]);
				now=d[now][j];
			}
		}
		cout<<sum<<" "<<mii<<"\n";
	}
	return 0;
}

E:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
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*10+ch-'0';ch=getchar();}
	return x*f;
}
int n,m,f[N][21],mn[N][21],dp[N];
int T,tot1,tot2,head1[N],head2[N];
struct edge1{int to,next;}e1[N<<1];
struct edge2{int get,k,w;}e2[N<<1];
void add_edge1(int u,int v)
{
	e1[++tot1].to=v;
	e1[tot1].next=head1[u];
	head1[u]=tot1;
}
void add_edge2(int pos,int k,int w)
{
	e2[++tot2].k=k;
	e2[tot2].w=w;
	e2[tot2].get=head2[pos];
	head2[pos]=tot2;
}
void dfs(int u,int fa)
{
	for(int i=1;i<=20;i++)
	{
		f[u][i]=f[f[u][i-1]][i-1];
		mn[u][i]=min(mn[u][i-1],mn[f[u][i-1]][i-1]);
	}
	for(int i=head2[u];i;i=e2[i].get)
	{
		int v=e2[i].k;
		int tmp=u,minn=1e18;
		for(int j=20;j>=0;j--)
		{
			if(v>=(1<<j))
			{
				minn=min(minn,mn[tmp][j]);
				v-=(1<<j);
				tmp=f[tmp][j];
			}
		}
		dp[u]=min(dp[u],e2[i].w+minn);
	}
	for(int i=head1[u];i;i=e1[i].next)
	{
		int v=e1[i].to;
		if(fa==v) continue;
		f[v][0]=u;
		mn[v][0]=dp[u];
		dfs(v,u);
	}
}
signed main()
{
	memset(dp,0x3f3f3f,sizeof dp);
	n=read(),m=read();
	for(int i=1;i<n;i++)
	{
		int u=read();
		int v=read();
		add_edge1(u,v);
		add_edge1(v,u);
	}
	for(int i=1;i<=m;i++)
	{
		int pos=read();
		int k=read();
		int w=read();
		add_edge2(pos,k,w);
	}
	dp[1]=0;dfs(1,0);
	T=read();
	while(T--){int a=read();printf("%d\n",dp[a]);} 
	return 0;
}

标签:ch,int,ybtoj,al,问题,--,abs,ga,倍增
From: https://www.cnblogs.com/cathyzro/p/18548170

相关文章

  • 非凸优化问题与凸优化问题的区别
    非凸优化问题与凸优化问题的区别目录引言什么是优化问题?凸优化问题凸函数的定义凸优化问题的特点非凸优化问题非凸函数的定义非凸优化问题的特点凸与非凸优化问题的主要区别常见的凸优化问题与非凸优化问题的应用总结代码与简要解读引言在优化问题中,目标是寻找一个......
  • 北京市新技术新产品新服务项目填报常见问题
    在北京市推动科技创新和产业升级的大背景下,新技术、新产品、新服务项目的申报与认定成为了众多企业关注的焦点。然而,在填报过程中,许多企业常常会遇到各种问题,导致申报进程受阻。那么,北京市新技术新产品新服务项目填报过程中常见的问题有哪些呢?又该如何有效解决这些问题,确保申......
  • 如何解决执行crictl命令报错的问题
    输入crictlimages提示[root@k8s-node1~]#crictlimagesWARN[0000]imageconnectusingdefaultendpoints:[unix:///var/run/dockershim.sockunix:///run/containerd/containerd.sockunix:///run/crio/crio.sockunix:///var/run/cri-dockerd.sock].Asthedefaultsetti......
  • http自动设置自动代理的问题
    1、在系统中,已经去掉了自动代理,但是在使用selenium的时候,无法启动webdriver.chrome()2、必须使用如下代码,清除环境变量通过打印os.environ看出'HTTP_PROXY':'http://127.0.0.1:8080', proxy_env_vars={'HTTP_PROXY','HTTPS_PROXY','http_proxy','http......
  • amsi.dll文件丢失导致程序无法运行问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个amsi.dll文件(挑选合适的版本文件)把它放入......
  • Linux系统编译QT5.15.0及串口问题
    编译流程:1>下载QT源码源码的下载可以到qt的官网http://www.qt.io/download/ 2>解压tarxvfqt-everywhere-src-x.x.x.tar.gz注意后缀和解压方式3>配置 ./configure进行环境配制。4>编译执行make编译,时间长,大概在三四个小时左右。5>安装sudomakeinstall需要5分钟......
  • Timeline动画「硬切」的问题
    1)Timeline动画「硬切」的问题2)移动平台纹理压缩格式选择ASTC,美术出图还需遵守POT吗3)如何去掉DOTSUnity.Entities.Graphics创建的BatchRendererGroup的UI相机回调4)Timeline播放动画会产生位移的问题这是第409篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区......
  • 记一次springboot的开机启动自动关闭问题
    具体问题特征:启动后,就是出现StartedApplicationin36.914seconds后,开始关闭定时任务、nacos服务注册等内容,中间没有任何异常信息,最后出现"进程已结束,退出代码为1"或者是“Processfinishedwithexitcode1”查到很多可能的情况:SpringBoot应用自动退出剖析-阿里云开发者......
  • 读数据质量管理:数据可靠性与数据质量问题解决之道04收集与清洗
    1.      收集数据1.1.        数据收集和清洗是生产管道中的第一步1.1.1.          数据转换和测试则在生产管道中解决数据质量问题1.2.        在收集数据时,管道的任何地方可能都没有入口点重要,因为入口点是任何数据管道中最上游的位......
  • 【ChatGPT】让ChatGPT生成批判性思维问题的回答
    让ChatGPT生成批判性思维问题的回答批判性思维是一种通过逻辑推理、分析和评估信息来获得更深刻理解的能力。在与ChatGPT互动时,可以通过设计带有挑战性和多维度的问题,让它展示出对主题的深入探讨和批判性思维。本篇文章将提供如何利用Prompt设置来引导ChatGPT在回答时展现......