CF572_Div2_F
题意
http://codeforces.com/contest/1189/problem/F
思考
由于是子序列,答案只跟选法有关,与顺序无关,先排序。
直接计算答案比较困难。联想到期望的无穷级数计算公式,设gi表示beauty值大于等于i的总方案数,则答案=sigma(g1~max{a})。
对于给定的gi,这是容易得到答案的。使用前缀和优化能在O(nk)的时间中得到一个值。
再发现当gi较大时,没有任何合法的方案。因为k*(n-1)会大于最大的值,取g到max{a}/(k-1)即可获得所有非0答案。
总复杂度O(max{a}*n)。
代码
#pragma GCC optimize 2
#include<bits/stdc++.h>
#define mod 998244353
using namespace std;
typedef long long int ll;
const int maxn=1E3+;
int n,k,a[maxn],maxx,where[maxn];
ll f[maxn][maxn],sum[maxn][maxn];
ll get(int x)
{
for(int i=;i<=k;++i)
for(int j=;j<=n;++j)
f[i][j]=;
for(int i=;i<=n;++i)
{
where[i]=where[i-];
while(a[i]-a[where[i]+]>=x)
++where[i];
}
f[][]=;
for(int i=;i<k;++i)
{
sum[i][]=f[i][];
for(int j=;j<=n;++j)
sum[i][j]=(sum[i][j-]+f[i][j])%mod;
for(int j=;j<=n;++j)
f[i+][j]=sum[i][where[j]];
}
ll sum=;
for(int i=;i<=n;++i)
sum=(sum+f[k][i])%mod;
return sum;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>k;
for(int i=;i<=n;++i)
{
cin>>a[i];
maxx=max(maxx,a[i]);
}
sort(a+,a+n+);
ll ans=;
for(int i=;i<=/(k-)+;++i)
ans=(ans+get(i))%mod;
cout<<ans<<endl;
return ;
}
CF572_Div2_F的更多相关文章
随机推荐
- Java Developer's Guide to SSL Certificates
https://www.codebyamir.com/blog/java-developers-guide-to-ssl-certificates Overview When developing w ...
- 对“TD信息树”的使用体验
在本次同2017级学长进行的软件交流会上,我们有幸使用学长们开发的软件与成果,进过27个不尽相同的软件的使用,让我初步意识到了学习软件工程这门学科的实用价值.最终我选择了"TD信息树&quo ...
- 【时区问题】SpringBoot+mybatis查询mysql的datetime类型数据时间差14小时
[时区问题]MyBatis查询MySQL的datetime类型数据时间差14小时 故障解决方式 与数据库连接时,定义时区,避免mybatis框架从mysql获取时区.在连接上加上 serverTime ...
- 使用svndumpfilter exclude来清理svn库的废弃文件实现差别备份
先啰嗦下为什么要使用svndumpfilter… svn库用久了以后就会越来越大,进行整体文件打包备份的时候,发现压力山大…尤其是美术团队也在使用svn进行重要美术资源管理的时候…….几百g的资源 ...
- Linux系统下 docker安装命令
centos sudo: 使用 root 权限登录 Centos.确保 yum 包更新到最新.yum update 卸载旧版本(如果安装过旧版本的话)yum remove docker docker- ...
- spring之通过注解方式配置Bean(一)
(1)组件扫描:spring能够从classpath下自动扫描.侦测和实例化具有特定注解的组件. (2)特定组件包括: @Component:基本注解,标识一个受spring管理的组件: @Respo ...
- ACM北大暑期课培训第二天
今天继续讲的动态规划 ... 补充几个要点: 1. 善于利用滚动数组(可减少内存,用法与计算方向有关) 2.升维 3.可利用一些数据结构等方法使代码更优 (比如优先队列) 4.一般看到数值小的 (十 ...
- Linux磁盘管理之LVM逻辑卷快照
一.快照的工作原理 所谓快照就是将当时的系统数据记录下来,在未来若有数据变动,则会将变更前的数据放入快照区进行保存.我们可理解为快照就是给系统拍了一张照片,记录当时系统在拍快照的状态.只不过现实生活中 ...
- JWT (一):认识 JSON Web Token
JWT(一):认识 JSON WebToken JWT(二):使用 Java 实现 JWT 什么是 JWT? JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑 ...
- 基于bootstrap的下拉选择 ( combox ) 输入 ( input ) 功能
需求: 在编辑数据的时候,既可以让用户输入,也可以从下拉框中选择 思路: 参照下面的效果图,因为是表格里面的数据,所以下拉框触发按钮和输入框分别为1列,输入列可以设置是否输入(方法:<td co ...