首页 > 其他分享 >【GJOI 2023.10.5 T1】 雷老师的正偏态分布

【GJOI 2023.10.5 T1】 雷老师的正偏态分布

时间:2023-10-06 15:14:41浏览次数:32  
标签:f1 f2 le int 2023.10 中位数 偏态 T1 mod

雷老师的正偏态分布

题意:给出一个长度为 \(n\) 的 \(a\) 数组,其中 \(1 \le a_i \le V , 1 \le i \le n\) 。统计其中的满足平均数严格小于中位数且大小为奇数的子集数量,\(n \le 100 , V \le 800\),时限 \(4\) s 。

输入:
5 10
1 2 7 9 10
输出:
8

首先,可以考虑排序,保证一个子集中小于的中位数的数都在中位数前面,大于中位数的在中位数后面。
那么我们就可以枚举中位数是哪个,然后统计答案。
每次枚举一个 \(k\) ,表示中位数前面有 \(k\) 个数,后面有 \(k\) 个数。
由于要求平均数小于中位数,设中位数为 \(p\) ,前面的数和为 \(x\) ,后面的数为 \(y\) ,那需满足 \(p \times k -x< y - p \times k\) 。
那就可以对前面与后面的数做两次背包,分别统计有 \(k\) 个数和为 \(x\) 有多少种方案即可,最后左右统计,累加答案,时间复杂度 \(O(n^5 V)\) 。
将其优化,考虑到每次求的背包都是一段从 \(1\) 或 \(n\) 开始的数,可以每次将一个数加进背包里,
对于从 \(n\) 开始的数,先预处理出 \(1\) ~ \(n\) 情况,然后用反悔背包,每次将一个数从背包中删去即可,步骤与加进去相反。
然后做的同时统计答案即可。
时间复杂度 \(O(n^3V)\) ,再略微卡卡常即可。

code

#include<bits/stdc++.h>
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
using namespace std;
const int mod=998244353;
int n,m,a[105],f2[105][80005],f1[105][80005],t[80005],V,s=0;
int main()
{
	scanf("%d%d",&n,&m);
	V=n*m;
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	sort(a+1,a+n+1);
	f1[0][0]=f2[0][0]=1;
	for(register int i=2;i<=n;i++)
	{
		for(register int j=n;j>=1;j--)
		{
			for(register int u=V;u>=a[i];u--)
			{
				f2[j][u]=f2[j-1][u-a[i]]+f2[j][u];
				f2[j][u]=f2[j][u]>mod?f2[j][u]-mod:f2[j][u];
			}
		}
	}
	int q,op,w=0;
	for(register int i=2;i<n;i++)
	{
		for(register int j=n;j>=1;j--)
		{
			for(register int u=V;u>=a[i-1];u--)
			{
				f1[j][u]=(f1[j-1][u-a[i-1]]+f1[j][u]);
				f1[j][u]=f1[j][u]>mod?f1[j][u]-mod:f1[j][u];
			}
		}
		for(register int j=1;j<=n;j++)
		{
			for(register int u=a[i];u<=V;u++)
			{
				f2[j][u]=(f2[j][u]-f2[j-1][u-a[i]]+mod);
				f2[j][u]=f2[j][u]>mod?f2[j][u]-mod:f2[j][u];
			}
		}
		for(register int j=1;j<=n;j++)
		{
			w=0;
			op=a[i]*j+1;
			for(register int u=1;u<=op;u++)
			{
				w+=f1[j][u-1];
				w=w>mod?w-mod:w;
				q=a[i]*j-u+a[i]*j;
				if(q<=0)break;
				s=(s+(int)(f2[j][q]*(long long)(w)%mod))%mod;
				s%=mod;
			}
		}
	}
	cout<<s;
	








  return 0;
}

标签:f1,f2,le,int,2023.10,中位数,偏态,T1,mod
From: https://www.cnblogs.com/dijah/p/17744587.html

相关文章

  • 板刷2023.10.04
    CF1878F.VasilijeLovesNumberTheory题解:约数个数+取模性质对\(n\)质因子分解得到,\(n=p_1^{\alpha_1}p_2^{\alpha_2}...p_k^{\alpha_k}\)那么显然\(d(n)=(\alpha_1+1)\times(\alpha_2+1)...(\alpha_k+1)\)根据题意可以得到:\(n\%d(n)=0\)的时候一定......
  • 2023.10.5
    A记\(\displaystylef(i)=\oplus_{d|i}d\),求\(\displaystyle\oplus_{i=1}^{n}f(i)\).\(n\le10^{14}\).考虑一个数是否出现计数次,对\(\lfloor\frac{n}{x}\rfloor\)整除分块,查询区间异或和即可。点击查看代码#include<bits/stdc++.h>#definelllonglongusingnames......
  • CS231N Assignment1 softmax 笔记
    -为Softmax分类器实现完全矢量化的损失函数-实现解析梯度完全矢量化的表达式使用数值梯度检查实现结果使用验证集调整学习率和正则化强度使用SGD优化损失函数可视化最终学习的权重softmax.ipynb库、绘图设置和数据的导入和SVM一样Traindatashape:(49000,3073)Tra......
  • 牛客网 $CSP-S$ 模拟赛 $T1$
    给定正整数\(n\),计算\(n\)个元素的集合\(\{1,2,3,...,n\}\),所有非空子集和的乘积取模\(998244353\)后的结果\(n\leq200\)我的第一思路是考虑能不能通过\(i-1\)个元素的情况推出\(i\)个元素的情况,然后寄掉了,遂看题解\(dp\)问题不只是线性递推,这题的思路是用\(......
  • 2023.10.5——每日总结
    学习所花时间(包括上课):0h代码量(行):0行博客量(篇):1篇今天,上午学习+休息,下午学习+休息;我了解到的知识点:1.Maven;2.SpringBoot;明日计划:学习+休息......
  • GJOI 2023.10.5 T2 假期计划Ⅱ
    GJOI2023.10.5T2假期计划Ⅱ题意:给出一个有\(n\)个点的有向图,每点到另一点都有一条有向边,边有权值。现有\(n^2\)次操作,每次会删去一些边,问每次删去后从\(1\)号点到\(n\)号点经过恰好\(k\)条边的最短路,若无法到达输出\(-1\)。\(n\le300,k\le8\)输入:34104......
  • 2023.9-2023.10 做题记录
    好菜啊,被爆杀了/kk1.CF1572ABook模拟赛上看错题了!#$%!#&%^&#*2.CF348DTurtles类似Catalan数的推导3.CF1271DPortals贪心题。4.CF1545BAquaMoonandChess数数题。注意两个连续的1的移动即可。5.AT_agc007_b[AGC007B]ConstructSequences简单题。注意值......
  • 2023.10.4
    今天没做多少,就做了一题,主要是因为下午去医院看牙,花了不少时间,人太多,在那里等了挺久做题目的时候遇到了一些和libc库有关的问题,本来问了学长,后来突然有了想法去查了些东西,自己把问题解决了,学到了不少东西明天预计要忙学校的作业,可能会学的比较少......
  • 2023.10.4——每日总结
    学习所花时间(包括上课):0h代码量(行):0行博客量(篇):1篇今天,上午学习+休息,下午学习+休息;我了解到的知识点:1.休息明日计划:学习+休息......
  • 水果系统项目分析pro10-fruit1.5-thymeleaf
    水果系统项目分析pro10-fruit1.5-thymeleaf基本架构增加增加水果删除水果渲染页面更新库存如上面所示的功能indexServletpackagecom.atguigu.fruit.servlets;importcom.atguigu.fruit.dao.FruitDAO;importcom.atguigu.fruit.dao.impl.FruitDAOImpl;importcom.......