2023.11.7

A

给出 \(n\),构造最大的 \(m\)\(\{(a,b,c)_m\}\),值域为 \([0,n]\) 且无偏序关系。

\(n\le 600\)


显然构造所有的 \(\displaystyle a+b+c=\lfloor\frac{3n}{2}\rfloor\) 即可。

点击查看代码
#include<bits/stdc++.h>
#define N 605
using namespace std;
int read(){
	int x=0,w=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
	while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
	return x*w;
}
int n,x;
struct dat{
	int a,b,c;
};
vector<dat>ans;
int main(){
	n=read();
	x=3*n/2;
	for(int a=0;a<=x;a++)
		for(int b=0;a+b<=x;b++)
			if(a<=n&&b<=n&&x-a-b<=n)
				ans.push_back((dat){a,b,x-a-b});
	printf("%d\n",(int)ans.size());
	for(dat j:ans)printf("%d %d %d\n",j.a,j.b,j.c);
	
	return 0;
}


B

\(n\) 次操作,往初始为空的序列的右端加入 \(l_i\)\(p_i\)

在序列中找出和在 \([L,R]\) 间的一个区间,最大化平均值。

\(n\le 3\times 10^5\)\(1\le l_i,p_i\le 10^6\)\(1\le L\le R\le \sum l_i\cdot p_i\),精度要求 \(10^{-6}\).


把题目所给的 \(n\) 个连续段称整块,那么最终答案不可能两端均为散块。可以得到 \(O(n^2)\) 的做法。

然后使用单调队列优化。在出题人造的数据下接近 \(O(n\log n)\).


C

一棵树 \(T_0\)\(k\) 次砍断一条边并选取两个连通块其一,记为 \(T_i\)

问多少种切树方案 \(\{T_0,\dots,T_k\}\) 满足 \(i\in[1,k]\)\(|T_i|=a_i\)

\(n\le 5000\)


D

最小树形图。不好评价。

posted @ 2023-11-07 15:18  SError  阅读(7)  评论(0编辑  收藏  举报