• Solution Set -「CF 1485」


    「CF 1485A」Add and Divide

    Link.

    贪心。枚举 ([b,b+log_{2} ext{range}]) 然后取个 (min)

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int t,a,b,ans;
    int search(int bas)
    {
    	if(bas>1)
    	{
    		int tmp=a,res=0;
    		while(tmp>0)
    		{
    			tmp/=bas;
    			res++;
    		}
    		return res;
    	}
    	else	return 1e9;
    }
    int main()
    {
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d %d",&a,&b);
    		if(a==b)	printf("%d
    ",2);
    		else if(a<b)	printf("%d
    ",1);
    		else
    		{
    			ans=1e9;
    			for(int i=b;i<=b+233;++i)	ans=min(ans,search(i)+i-b);
    			printf("%d
    ",ans);
    		}
    	}
    	return 0;
    }
    

    「CF 1485B」Replace and Keep Sorted

    Link.

    每个元素都可以上下摇摆于是预处理前缀差分和和后缀差分和(因为是 strictly increasing 所以要减 (1))即可。

    #include<cstdio>
    int n,m,k,a[100010],fro[100010],rea[100010];
    void pre()
    {
    	for(int i=1;i<=n;++i)	fro[i]=a[i]-a[i-1]-1;
    	for(int i=n;i>=1;--i)	rea[i]=a[i+1]-a[i]-1;
    	for(int i=1;i<=n;++i)	fro[i]+=fro[i-1];
    	for(int i=n;i>=1;--i)	rea[i]+=rea[i+1];
    }
    int main()
    {
    	scanf("%d %d %d",&n,&m,&k);
    	for(int i=1;i<=n;++i)	scanf("%d",&a[i]);
    	pre();
    	while(m--)
    	{
    		int l,r;
    		scanf("%d %d",&l,&r);
    		printf("%d
    ",k-a[r]+a[l]-1+fro[r]-fro[l]+rea[l]-rea[r]);
    	}
    	return 0;
    }
    

    「CF 1485C」Floor and Mod

    Link.

    [amod b=lfloorfrac{a}{b} floor=k \ ightarrow a=kb+k ightarrow a=(b+1)k ightarrow k=frac{a}{b+1} \ k<b ightarrow k^{2}<k(b+1)=ale x ightarrow 1le klesqrt{x} \ 1le ale x ightarrow 1le(b+1)kle x ightarrow1le blefrac{x}{k}-1 \ ightarrow ext{ans}=sum_{k=1}^{sqrt{x}}max(0,min(y,frac{x}{k}-1)-k) ]

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const long long zero=0ll;
    long long t,x,y,ans;
    int main()
    {
    	scanf("%lld",&t);
    	while(t--)
    	{
    		scanf("%lld %lld",&x,&y);
    		ans=0;
    		for(long long i=1;i*i<=x;++i)	ans+=max(zero,min(y,x/i-1)-i);
    		printf("%lld
    ",ans);
    	}
    	return 0;
    }
    

    「CF 1485D」Multiples and Power Differences

    Link.

    • ((i+j)mod 2=1)(b_{i,j}= ext{lcm}(1,cdots,16))
    • ((i+j)mod 2=0)(b_{i,j}= ext{lcm}(1,cdots,16)+a_{i,j}^{4})
    #include<cstdio>
    int n,m,x;
    int main()
    {
    	scanf("%d %d",&n,&m);
    	for(int i=1;i<=n;++i)
    	{
    		for(int j=1;j<=m;++j)
    		{
    			scanf("%d",&x);
    			if((i+j)&1)	printf("%d ",720720);
    			else	printf("%d ",720720+x*x*x*x);
    		}
    		printf("
    ");
    	}
    	return 0;
    }
    

    「CF 1485E」Move and Swap

    Link.

    blue 因为就是一直往下跑,所以一次操作在哪里不影响。

    于是设 (f_{u}) 为操作完毕后 red 跑到 (u) 的 maximum value。

    • (vin ext{son}(u)) 为 red:此时没发生 swapping,(f_{u}=f_{v}+|a_{u}-a_{v}|)
    • (vin ext{son}(u)) 为 blue:此时发生了 swapping,那么枚举 (v) 的同层结点 (anov)(f_{u}=f_{anov}+|a_{u}-a_{anov}|)
    #include<queue>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const long long INF=1e18;
    vector<int> e[200010],same[200010];
    int t,n,dep[200010],fa[200010],leaf;
    long long a[200010],f[200010];
    void dfs(int x,int las)
    {
    	dep[x]=dep[las]+1;
    	fa[x]=las;
    	leaf=max(leaf,dep[x]);
    	for(int i=0;i<e[x].size();++i)
    	{
    		int y=e[x][i];
    		if(y^las)	dfs(y,x);
    	}
    }
    void DP(int d)
    {
    	for(int i=d;i>1;--i)
    	{
    		long long mn=INF,mx=-INF,one=-INF,ano=-INF;
    		for(int j=0;j<same[i].size();++j)
    		{
    			mn=min(mn,a[same[i][j]]);
    			mx=max(mx,a[same[i][j]]);
    		}
    		for(int j=0;j<same[i].size();++j)	f[fa[same[i][j]]]=max(f[fa[same[i][j]]],max(a[same[i][j]]-mn,mx-a[same[i][j]])+f[same[i][j]]);
    		for(int j=0;j<same[i].size();++j)
    		{
    			one=max(one,f[same[i][j]]+a[same[i][j]]);
    			ano=max(ano,f[same[i][j]]-a[same[i][j]]);
    		}
    		for(int j=0;j<same[i].size();++j)	f[fa[same[i][j]]]=max(f[fa[same[i][j]]],max(one-a[same[i][j]],ano+a[same[i][j]]));
    	}
    }
    int main()
    {
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d",&n);
    		for(int i=2;i<=n;++i)
    		{
    			int x;
    			scanf("%d",&x);
    			e[x].push_back(i);
    			e[i].push_back(x);
    		}
    		for(int i=2;i<=n;++i)	scanf("%d",&a[i]);
    		dfs(1,0);
    		for(int i=1;i<=n;++i)	same[dep[i]].push_back(i);
    		DP(leaf);
    		printf("%lld
    ",f[1]);
    		for(int i=1;i<=n;++i)
    		{
    			f[i]=dep[i]=fa[i]=0;
    			same[i].clear();
    			e[i].clear();
    		}
    		leaf=0;
    	}
    	return 0;
    }
    

    「CF 1485F」Copy or Prefix Sum

    Link.

  • 相关阅读:
    使用NuGet.Packaging打包nupkg文件
    使用csc.exe编译cs文件为dll
    QT Linux QT Linux stray \377 in program 洲际导弹
    vs qt 乱码 洲际导弹
    将Linux QT 在银河麒麟系统上 文件左上角有锁的标识 洲际导弹
    VS QT 用QT插件不能配置QT的环境,每次配置完成后,再次打开还是未能配置完成 洲际导弹
    QT 编译报错 the kit desktop QT 5.7.1 GCC 64Bit has configuration issues which might be the root cause for this problem when executing step make 问题 洲际导弹
    QT Linux 中文乱码 洲际导弹
    QT centos 设置qmake环境变量 洲际导弹
    QT 连接MySQL数据库打不开 洲际导弹
  • 原文地址:https://www.cnblogs.com/orchid-any/p/14409809.html
Copyright © 2020-2023  润新知