首页 > 其他分享 >2024暑假集训测试28

2024暑假集训测试28

时间:2024-08-19 18:16:51浏览次数:13  
标签:write read void 28 Tp 2024 int inline 集训

前言

上午要输液所以没有打,就下午改一改,应该明天就能回去了。

T1 与和

\(x\&y=a\),说明 \(x,y\) 二进制中都包含 \(a\) 且其余位上均不重合,故此若 \((s-2a)\&a=0\) 即符合,特殊的,因为 \(x\&y=a\le \min(x,y)\),所以 \(x+y=s\ge 2a\),需要特判。

T2 函数

对于 \(f_1(f_2(x))\ge f_2(f_1(x))\),有 \(a_1a_2x+a_1b_2+b_1\ge a_2a_1x+a_2b_1+b_2\),移项有 \(\dfrac{b_1}{a_1-1}\le \dfrac{b_2}{a_2-1}\),故此将 \(\dfrac{b_i}{a_i-1}\) 作为关键字降序排序即可作为决策顺序。

之后直接 DP 转移即可,设 \(f_{i,j}\) 位前 \(i\) 个数中选择了 \(j\) 个时的最大值,有:

\[f_{i,j}=\max(f_{i-1,j},f_{i-1,j-1}\times a_i+b_i) \]

第一维可以滚掉。

点击查看代码
#include<bits/stdc++.h>
#define ll long long 
#define endl '\n'
#define sort stable_sort
using namespace std;
const int N=2e5+10;
template<typename Tp> inline void read(Tp&x)
{
	x=0;register bool z=true;
	register char c=getchar();
	for(;c<'0'||c>'9';c=getchar()) if(c=='-') z=0;
	for(;'0'<=c&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	x=(z?x:~x+1);
}
template<typename T,typename ...Tp> inline void read(T &x,Tp &...y){read(x);read(y...);}
template<typename Tp> inline void wt(Tp x)
{if(x>9)wt(x/10);putchar((x%10)+'0');}
template<typename Tp> inline void write(Tp x)
{if(x<0)putchar('-'),x=~x+1;wt(x);}
template<typename T,typename ...Tp> inline void write(T x,Tp ...y){write(x);putchar(' ');write(y...);}
int n,k;
ll f[11];
struct aa {int a,b;}e[N];
bool cmp(aa a,aa b) {return a.b*(b.a-1)>b.b*(a.a-1);}
signed main()
{
	read(n,k);
	for(int i=1;i<=n;i++) read(e[i].a,e[i].b);
	sort(e+1,e+1+n,cmp);
	f[0]=1;
	for(int i=1;i<=n;i++)
		for(int j=min(i,k);j>=1;j--) 
			f[j]=max(f[j],f[j-1]*e[i].a+e[i].b);
	write(f[k]);
}

T3 袋鼠

和某次的 DP 搬运工是同一种题型,预设型 DP。

原问题可以转化为 \(1\sim n\) 的全排中能够满足对于任意 \(a_i\) 满足 \(a_{i-1}<a_1,a_i>a_{i+1}\) 或 \(a_{i-1}>a_i,a_i<a_{i+1}\) 的有多少。

那么考虑预设型 DP,从小到大插数,设 \(f_{i,j}\) 为前 \(i\) 个数分成了 \(j\) 段,那么有:

  • \(i\ne s\) 且 \(i\ne t\):

    • \(i\) 新开了一段,因为后面插入的数能接到他两边的一定都比他大,所以一定合法,加入前共有 \(j-1\) 段所以有 \(j\) 个位置可以放但是若 \(i>s\) 就不能放开头了,同理 \(i>t\) 就不能放结尾了,故有:

      \[f_{i,j}+=(j-[i>s]-[i>t])\times f_{i-1,j-1} \]

    • \(i\) 接在一段的开头或结尾且并不使两段接壤,因为此时与他相邻的数一定小于他,而后面再加入的与其相邻的数一定大于他,故一定不合法。

    • \(i\) 使两段接壤,因为此时与其相邻的两个数一定都小于他,所以一定合法,在进行这一步前有 \(j+1\) 个段产生 \(j\) 个间隙,故此有:

      \[f_{i,j}+=j\times f_{i-1,j+1} \]

  • \(i=s\) 或 \(i=t\):

    此时他是一定接在开头或结尾的,故最终只有一个数与其相邻,因为之前加入的数都比他小,所以一定合法,同时不存在使两段接壤的情况,只需要考虑新开一段和接在原来段的开头或结尾即可,其所填位置唯一,故有:

    \[f_{i,j}=f_{i-1,j-1}+f_{i-1,j} \]

最终一定只有一段,故答案为 \(f_{n,1}\),第一维可以滚掉,那么类似的之前做的 P2467 [SDOI2010] 地精部落 这题也可以用预设型 DP 直接做了,DP 多开两维表示当前首尾选没选就行了。

点击查看代码
#include<bits/stdc++.h>
#define ll long long 
#define endl '\n'
#define sort stable_sort
using namespace std;
const int N=2e3+10,P=1e9+7;
template<typename Tp> inline void read(Tp&x)
{
	x=0;register bool z=true;
	register char c=getchar();
	for(;c<'0'||c>'9';c=getchar()) if(c=='-') z=0;
	for(;'0'<=c&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	x=(z?x:~x+1);
}
template<typename T,typename ...Tp> inline void read(T &x,Tp &...y){read(x);read(y...);}
template<typename Tp> inline void wt(Tp x)
{if(x>9)wt(x/10);putchar((x%10)+'0');}
template<typename Tp> inline void write(Tp x)
{if(x<0)putchar('-'),x=~x+1;wt(x);}
template<typename T,typename ...Tp> inline void write(T x,Tp ...y){write(x);putchar(' ');write(y...);}
int n,s,t,f[2][N];
signed main()
{
	read(n,s,t);
	f[1][1]=1;
	for(int i=2;i<=n;i++)
		for(int j=1;j<=i;j++)
		{
			if(i!=s&&i!=t) f[i&1][j]=(1ll*f[(i-1)&1][j-1]*(j-(i>s)-(i>t))%P+1ll*f[(i-1)&1][j+1]*j%P)%P;
			else f[i&1][j]=f[(i-1)&1][j-1]+f[(i-1)&1][j];
		}
	write(f[n&1][1]);
}

T4 最短路

还没有打。

标签:write,read,void,28,Tp,2024,int,inline,集训
From: https://www.cnblogs.com/Charlieljk/p/18367698

相关文章

  • NJUSC2024 游记
    Day-1到达南京,参观玄武湖,打颓。感觉玄武湖很不错。Day0参观南京博物院。全是人,没啥兴趣。下午和fyz去打开某个网红咖啡店,全是人,没啥意思。然后去报道。晚上打颓。Day1上午数学考试,反正就是图一乐,发现只看得懂最后一道题,发现最后一道题是签到,30分钟写了开摆。下午机试。......
  • 2024首届中国Scrum大会成功落幕
    ​​2024年8月17日,首届中国Scrum大会在上海圆满落幕。这次大会由Scrum.org和Scrum中文网联合主办,以“AI时代下的敏捷”为主题,吸引了来自全国各地的敏捷实践者、企业领导、技术专家和学者,共同探讨敏捷方法在新时代的应用与未来发展。大会内容丰富,设置了三个分会场,分别聚焦金融业......
  • 聊聊2024 年人们对人工智能的信任程度有多高?
    引言随着人工智能渗透到人们生活的各个方面,了解人们对技术的信任变得越来越重要。尽管人工智能有可能彻底改变行业并改善日常生活,但它却伴随着着迷与怀疑。了解公众对人工智能的普遍感受以及这些看法可能如何随着使用而改变,可以让其他人了解人工智能信任的现状及其未来影响......
  • 【题解】Solution Set - NOIP2024集训Day10 树的直径、重⼼、中⼼
    【题解】SolutionSet-NOIP2024集训Day10树的直径、重⼼、中⼼https://www.becoder.com.cn/contest/5464「CF516D」DrazilandMorningExercise首先,我们可以换根求出所有点的\(f\)。然后不会了……思考一下,一条直径提供的到底时什么。实际上,一条直径上的点取到\(f\)......
  • 暑假集训CSP提高模拟24
    暑假集训CSP提高模拟24\(T1\)P268.与和\(100pts\)原题:[ABC238D]ANDandSUM\(x,y\)下界显然为\(a\),不妨让\(y=a,x=s-a\)然后进行\(check\)。正确性由下一种做法可以进一步推导。点击查看代码intmain(){ freopen("and.in","r",stdin); freopen("and.out"......
  • 2024年新版Python零基础从入门到进阶学习路线!
    Python基础初始Python基础语法流程控制-选择结构流程控制-循环结构字符串和正则函数入门函数高级数据结构-列表和元组数据结构-字典和集合IO和文件操作文件操作进阶面向对象入门面向对象三大特性面向对象应用异常处理常用内置模块序列化模块网络请求模块MySQL入门MySQL命......
  • test 2024.8.19
    test考试时PUCK:我们攻克了一个技术问题,现在可以用c++14了结果:评测机发神经吃我100分T1T2T3T4没错就是这道吃了我100pts一眼可以发现是一个很典的最大费用最大流模型,暴力建图发现边数\(n^2\)不可过注意到曼哈顿距离是两个绝对值构成的注意到\(|a|+|b|=\max(a+b,-a......
  • 题解:P10844 [EGOI2024] Infinite Race / 无限赛跑
    题解:P10844[EGOI2024]InfiniteRace/无限赛跑有n个人在环形跑道上跑步,和q次超越别人或被别人超越,别人要么在Anika前面,要么在后面怎么说呢,建议降红由于只有重复超过一个人才肯定是跑过一圈的,所以一个数组就行了,每超过一次就打上标记,不然去掉标记。#include<bits/stdc......
  • cdrx4专业版汉化免费安装包下载2024最新
    最近,我终于用上了CorelDRAWX4!这款软件的最新版本真的让我大开眼界,它不仅拥有强大的绘图和设计功能,还加入了一些让人惊喜的新特性。我要说的是,CorelDRAWX4的界面更加简洁明了了。所有的工具和菜单都被重新组织,使得用户能够更快速地找到所需的功能。而且,它还新增了一些实用的......
  • cdr软件X4破解版本安装包下载2024最新
    “coreldrawx4”的更新,让设计师们再次燃起了对这款软件的期待与好奇。作为一款专业的矢量图形绘制软件,它不仅拥有强大的绘图工具和丰富的特效资源,还提供了便捷的操作界面和高效的工作流程,是设计师们不可或缺的得力助手。在新版本中,“coreldrawx4”带来了多项令人惊喜的新功能......