首页 > 其他分享 >暑假集训CSP提高模拟14

暑假集训CSP提高模拟14

时间:2024-08-06 14:50:33浏览次数:13  
标签:cnt 14 400010 ll head CSP fa void 集训

暑假集训CSP提高模拟14

组题人: @H_Kaguya | @LYinMX

\(T1\) P209.BA \(30pts\)

  • 部分分

    • \(30pts\) :输出 \(\left\lceil \dfrac{\sum\limits_{i=1}^{m}a_{i}}{n} \right\rceil\) 。
  • 数形结合,将 \(\{ a \}\) 抽象成矩形,烙饼抽象成海报覆盖,最终有 \(\max(\max\limits_{i=1}^{m} \{ a_{i} \},\left\lceil \dfrac{\sum\limits_{i=1}^{m}a_{i}}{n} \right\rceil)\) 即为所求,注意精度(?)。

    点击查看代码
    int main()
    {
    	ll n,m,x,sum=0,maxx=0,i;
    	cin>>m>>n;
    	for(i=1;i<=m;i++)
    	{
    		cin>>x;
    		sum+=x;
    		maxx=max(maxx,x);
    	}
    	cout<<max(maxx,(sum+n-1)/n)<<endl;
    	return 0;
    }
    

\(T2\) P210. BB \(25pts\)

  • 原题: luogu P9133 [THUPC 2023 初赛] 大富翁

  • 部分分

    • \(25pts\) :枚举所有合法状态,由买方是 \(A\) 还是 \(B\) 决定取最大值还是最小值转移,因为只能应付 \(n\) 很小的数据,所以暴力跳父亲比树剖维护路径信息会快点(?)。

      点击查看代码
      struct node
      {
      	ll nxt,to;
      }e[400010];
      ll head[400010],w[400010],fa[400010],dfn[400010],out[400010],a[400010],vis[400010],tot=0,cnt=0;
      struct BIT
      {
      	ll c[400010];
      	void init()
      	{
      		memset(c,0,sizeof(c));
      	}
      	ll lowbit(ll x)
      	{
      		return (x&(-x));
      	}
      	void add(ll n,ll x,ll val)
      	{
      		for(ll i=x;i<=n;i+=lowbit(i))
      		{
      			c[i]+=val;
      		}
      	}
      	ll getsum(ll x)
      	{
      		ll ans=0;
      		for(ll i=x;i>=1;i-=lowbit(i))
      		{
      			ans+=c[i];
      		}
      		return ans;
      	}
      	ll ask(ll l,ll r)
      	{
      		return getsum(r)-getsum(l-1);
      	}
      }A,B;
      void add(ll u,ll v)
      {
      	cnt++;
      	e[cnt].nxt=head[u];
      	e[cnt].to=v;
      	head[u]=cnt;
      }
      void dfs(ll x)
      {
      	tot++;
      	dfn[x]=tot;
      	for(ll i=head[x];i!=0;i=e[i].nxt)
      	{
      		dfs(e[i].to);
      	}
      	out[x]=tot;
      }
      ll dp(ll pos,ll n,ll sum)
      {
      	if(pos==n+1)
      	{
      		return sum;
      	}
      	else
      	{
      		ll minn=0x7f7f7f7f,maxx=-0x7f7f7f7f,n1,n2,x;
      		if(pos%2==1)
      		{
      			for(ll i=1;i<=n;i++)
      			{
      				if(vis[i]==0)
      				{
      					n1=n2=0;
      					x=i;
      					while(x!=1)
      					{
      						x=fa[x];
      						n2+=(vis[x]==-1);
      					}
      					n1=B.ask(dfn[i],out[i]);
      					vis[i]=1;
      					A.add(n,dfn[i],1);
      					maxx=max(maxx,dp(pos+1,n,sum+n1-n2-w[i]));
      					A.add(n,dfn[i],-1);
      					vis[i]=0;
      				}
      			}
      			return maxx;
      		}
      		else
      		{
      			for(ll i=1;i<=n;i++)
      			{
      				if(vis[i]==0)
      				{
      					n1=n2=0;
      					x=i;
      					while(x!=1)
      					{
      						x=fa[x];
      						n2+=(vis[x]==1);
      					}
      					n1=A.ask(dfn[i],out[i]);
      					vis[i]=-1;
      					B.add(n,dfn[i],1);
      					minn=min(minn,dp(pos+1,n,sum-(n1-n2)));
      					B.add(n,dfn[i],-1);
      					vis[i]=0;
      				}
      			}
      			return minn;
      		}
      	}
      }
      int main()
      {
      	ll n,i;
      	cin>>n;
      	for(i=1;i<=n;i++)
      	{
      		cin>>w[i];
      	}
      	for(i=2;i<=n;i++)
      	{
      		cin>>fa[i];
      		add(fa[i],i);
      	}
      	dfs(1);
      	cout<<dp(1,n,0)<<endl;
      	return 0;
      }
      
  • 正解

    • 买方每次购买一个点都会得到 \(n_{1}-n_{2}-w_{x}\) 个游戏币,相应的对方减少 \(n_{1}-n_{2}\) 个游戏币即得到 \(n_{2}-n_{1}\) 个游戏币。
    • 当购买一个点后,给祖先每个点的所属对象(不管是现在还是未来)交一个游戏币,这样的话仍满足题意。那么一个点对答案产生的贡献就是 \(siz_{x}-1-(dep_{x}-1)-w_{x}=siz_{x}-dep_{x}-w_{x}\) 。
    • 排序后跳着选即可。
    点击查看代码
    struct node
    {
    	ll nxt,to;
    }e[400010];
    ll head[400010],w[400010],siz[400010],dep[400010],fa[400010],cnt=0;
    void add(ll u,ll v)
    {
    	cnt++;
    	e[cnt].nxt=head[u];
    	e[cnt].to=v;
    	head[u]=cnt;
    }
    void dfs(ll x)
    {
    	siz[x]=1;
    	dep[x]=dep[fa[x]]+1;
    	for(ll i=head[x];i!=0;i=e[i].nxt)
    	{
    		dfs(e[i].to);
    		siz[x]+=siz[e[i].to];
    	}
    }
    int main()
    {
    	ll n,ans=0,i;
    	cin>>n;
    	for(i=1;i<=n;i++)
    	{
    		cin>>w[i];
    	}
    	for(i=2;i<=n;i++)
    	{
    		cin>>fa[i];
    		add(fa[i],i);
    	}
    	dfs(1);
    	for(i=1;i<=n;i++)
    	{
    		w[i]=siz[i]-dep[i]-w[i];
    	}
    	sort(w+1,w+1+n);
    	for(i=n;i>=1;i-=2)
    	{
    		ans+=w[i];
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    

\(T3\) P211. BC \(0pts\)

\(T4\) P212. BD \(0pts\)

总结

后记

标签:cnt,14,400010,ll,head,CSP,fa,void,集训
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18344905

相关文章

  • pytorch OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败”原因分析
    动态链接库失败“OSError:[WinError1114]动态链接库(DLL)初始化例程失败。Errorloading"cublas64_12.dll"oroneofitsdependencies”原因分析出错情况:在importtorch中直接被抛出异常环境探讨【问题复现】:因为使用了新的torch-gpu环境【name称为torch】,固怀疑......
  • 1990-2023年上市公司常用变量数据(1400+指标)
    1990-2023年上市公司常用变量数据(1400+指标)1、时间:1990-2023年2、范围:上市公司3、格式:dta4、来源:上市公司年报5、指标:包括上市公司基本信息(性质、行业、地址)、财务状况(资产负债、利润表、现金流量、偿债能力、披露财务、比率结构、经营能力、盈利能力、现金流量、风险水平......
  • 【ceph】手动编译14.2.22 ceph版本---超详细版本,生产可用
      本站以分享各种运维经验和运维所需要的技能为主《python零基础入门》:python零基础入门学习《python运维脚本》: python运维脚本实践《shell》:shell学习《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战《k8》暂未更新《docker学习》暂未更新《ceph学......
  • 题解 P6873 [COCI2013-2014#6] FONT
    link题意给你\(N\)个单词,问最多能组成多少个包含所有小写英文字母的句子。\(\mathrm{Solution}\)\(N\le25\)显然搜索。枚举当前选还是不选,搜到头判断是否成功即可。\(\mathrm{Code}\)#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;consti......
  • 2024上岸|314数农备考攻略
    前言......
  • 日撸Java三百行(day14:栈)
    目录一、栈的基本知识1.栈的概念2.栈的功能3.栈的实现二、栈的代码实现1.栈的基本属性与方法2.栈的遍历3.入栈实现4.出栈实现5.数据测试6.完整的程序代码总结一、栈的基本知识1.栈的概念根据百度百科,我们知道“栈”是存储货物或供旅客住宿的地方,可引申为仓库......
  • 暑假集训 · 第三间
    放假8.3上午因为下午没有动车,所以早走了一会其他游戏都要更新(而且相当费电),直接启动9了在火车站无聊忍不住了单抽了几下出了环状水星因为我前面小保底吃满还歪了所以不是很惊讶然后换伽菈波那池子点了一下,又出了,十分得有十二分的不对劲......
  • P1447 [NOI2010] 能量采集
    题目传送容斥思想的一道好题。题目容易转化为:\[2\times\sum_{i=1}^n\sum_{j=1}^n(\gcd(i,j))\-nm.\]直接求和不好求,不妨转换为枚举\(d=\gcd(i,j)\)。那么\(i,j\)应该均为\(d\)的倍数。记\(f(i)=\left\lfloor\frac{n}{i}\right\rfloor\cdot\left\lfloor......
  • 平邑集训(补题)
    Day1A咕咕题目描述解法DP,设\(dp_{i,j}\)表示从\((1,1)\)走到\((n,m)\)的方案数。转移的时候,需要按照给定的限制走,如果一个点的(2)(3)限制冲突了,那么就标记一下,经过他的时候绕过他,时间复杂度\(O(nm)\)。代码点击查看代码intn,m,t;intf[3001][3001];intdp[300......
  • 8月5日CSP-S模拟赛赛后总结
    8月5日CSP-S模拟赛赛后总结\[8月5日\\CSP-S模拟赛\\赛后总结\\2024年8月5日\\by\\\uhw177po\]一、做题情况第一题比赛\(100pts\),赛后\(AC\)第二题比赛\(20pts\),赛后\(AC\)第三题比赛\(0(40)pts\),赛后\(AC\)第四题比赛\(0(50)pts\),赛后\(A......