生成魔咒

/*
后缀数组+双向链表
参照:https://blog.csdn.net/clove_unique/article/details/53911757
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+;
int n,cnt,c[N],ans[N],s[N],t[N],rank[N],trank[N],sa[N],tsa[N],h[N],nxt[N],pre[N];
long long res;
void DA(){
int p,maxx=cnt;
memset(c,,sizeof c);
for(int i=;i<=n;i++) c[rank[i]=s[i]]++;
for(int i=;i<=maxx;i++) c[i]+=c[i-];
for(int i=n;i;i--) sa[c[rank[i]]--]=i;
trank[sa[]]=p=;
for(int i=;i<=n;i++){
if(rank[sa[i]]!=rank[sa[i-]]) p++;
trank[sa[i]]=p;
}
for(int i=;i<=n;i++) rank[i]=trank[i];
for(int k=;p<n;k<<=,maxx=p){
p=;
for(int i=n-k+;i<=n;i++) tsa[++p]=i;
for(int i=;i<=n;i++) if(sa[i]>k) tsa[++p]=sa[i]-k;
memset(c,,sizeof c);
for(int i=;i<=n;i++) trank[i]=rank[tsa[i]];
for(int i=;i<=n;i++) c[trank[i]]++;
for(int i=;i<=maxx;i++) c[i]+=c[i-];
for(int i=n;i;i--) sa[c[trank[i]]--]=tsa[i];
trank[sa[]]=p=;
for(int i=;i<=n;i++){
if(rank[sa[i]]!=rank[sa[i-]]||rank[sa[i]+k]!=rank[sa[i-]+k]) p++;
trank[sa[i]]=p;
}
for(int i=;i<=n;i++) rank[i]=trank[i];
}
for(int i=,k=;i<=n;i++){
int j=sa[rank[i]-];
while(s[i+k]==s[j+k]) k++;
h[rank[i]]=k;if(k>) k--;
}
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&s[i]),t[i]=s[i];
for(int i=;i<=n/;i++) swap(s[i],s[n-i+]);
sort(t+,t+n+);
cnt=unique(t+,t+n+)-(t+);
for(int i=;i<=n;i++) s[i]=lower_bound(t+,t+cnt+,s[i])-t;
DA();
for(int i=;i<=n;i++){
nxt[i]=i+;
pre[i]=i-;
}
for(int i=;i<=n;i++){
int k=rank[i];
ans[i]=n-i+-max(h[k],h[nxt[k]]);
h[nxt[k]]=min(h[k],h[nxt[k]]);
nxt[pre[k]]=nxt[k];
pre[nxt[k]]=pre[k];
}
for(int i=n;i;i--){
res+=ans[i];
printf("%lld\n",res);
}
return ;
}

排列计数

/*
ans=C(n,m)*dp(n-m);|dp(i)表示i的错排数
*/
#include<cstdio>
using namespace std;
typedef long long ll;
inline ll read(){
ll x=;char ch=getchar();
while(ch<''||ch>''){ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x;
} #define FRE(name) freopen(#name".in","r",stdin);freopen(#name".out","w",stdout);
#define fre(name) freopen(#name".txt","r",stdin);
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif const ll S=1e6;
const ll N=S+;
const ll mod=1e9+;
ll cas,n,m,ans,dp[N],fz[N],fm[N];
ll fpow(ll a,ll p){
ll res=;
for(;p;p>>=,a=a*a%mod) if(p&) res=res*a%mod;
return res;
}
void first(){
dp[]=;dp[]=;
fz[]=fz[]=fm[]=fm[]=;
for(ll i=;i<=S;i++) dp[i]=(i*dp[i-]%mod+((i&)?-:)+mod)%mod;
for(ll i=;i<=S;i++) fz[i]=fz[i-]*i%mod;
fm[S]=fpow(fz[S],mod-);
for(ll i=S-;i>=;i--) fm[i]=fm[i+]*(i+)%mod;
}
void solve(){
for(cas=read();cas--;){
n=read();m=read();
ans=(((fz[n]*fm[m])%mod*fm[n-m])%mod*dp[n-m])%mod;
printf(LL "\n",ans);
}
}
int main(){
//FRE(permutation);
first();
solve();
return ;
}

征途

/*
ans=m(x_1^2+X_2^2+……+x_m^2)-(x_1+X_2+……+x_m)^2
令dp[i][j]表示前i个数已经选择到了x_j的最小值;这样就变成了一个区间dp
我懒,就不写单调队列优化了
*/
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll; #define pf(x) ((x)*(x))
#define fro __attribute__((optimize("O2")))
#define FRE(name) freopen(#name".in","r",stdin);freopen(#name".out","w",stdout);
#define fre(name) freopen(#name".txt","r",stdin);
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif const int N=;
int n,m,a[N],p[N][N];
ll ans,sum[N],dp[N][N]; fro int main(){
//FRE(journey);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]),sum[i]=sum[i-]+a[i];
memset(dp,0x3f3f3f3f,sizeof dp);
dp[][]=;
for(int j=;j<=m;j++){
for(int i=j;i<=n;i++){
for(int k=p[i-][j];k<i;k++){
if(dp[i][j]>dp[k][j-]+pf(sum[i]-sum[k])){
dp[i][j]=dp[k][j-]+pf(sum[i]-sum[k]);
p[i][j]=k;
}
}
}
}
ans=dp[n][m]*(ll)m-pf(sum[n]);
printf(LL,ans);
return ;
}

SDOI 2016 Round1 Day2的更多相关文章

  1. 【BZOJ 4517】【SDOI 2016 Round1 Day2 T2】排列计数

    本蒟蒻第一次没看题解A的题竟然是省选$Round1$ $Day2$ $T2$ 这道组合数学题. 考试时一开始以为是莫队,后来想到自己不会组合数的一些公式,便弃疗了去做第三题,,, 做完第三题后再回来看 ...

  2. 【BZOJ 4518】【SDOI 2016 Round1 Day2 T3】征途

    比较明显的斜率优化DP,省选时因为时间太紧张和斜率DP写得不熟等原因只写了60分的暴力DP,其实当时完全可以对拍来检验标算的正确,但是我当时too naive- 很快打完了,调了将近一晚上QAQ,因为 ...

  3. 【NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2】游记

    我第一次写游记,,,, 正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪 ...

  4. 【BZOJ 4515】【SDOI 2016 Round1 Day1 T3】游戏

    考场上写了lct,可惜当时对标记永久化的理解并不是十分深刻,导致调一个错误的程序调了4h+,最后这道题爆0了QwQ 现在写了树链剖分,用标记永久化的线段树维护轻重链,对于$s\rightarrow l ...

  5. SDOI 2016 Round1 Day1

    储能表 /* 引自zyz大佬的数学思想 */ #include<cstdio> #include<iostream> using namespace std; typedef ...

  6. SDOI 2019 Round1 游记

    \(SDOI~2019 ~ Round1\) 游记 \(Day ~0\) 报道.骑车子去的,好热.到了之后看到好几个同校神仙,还从那里莫名其妙的等了一会,然后交了钱签了名就拿挂牌走人了.现在居然还有受 ...

  7. SDOI 2016 游戏

    树链剖分 线段树维护区间最小值,区间最大值 更新,对于每一个区间,找到当前区间的最小值的最大值,和要更新的值比较,如果比最大值还大,则此数对于以后的询问无任何贡献,直接返回即可,若有贡献,则一直递归到 ...

  8. SDOI 2016 数字配对

    题目大意:给定n个数字以及每个数字的个数和权值,将满足条件的数字配对,使得总代价不小于0,且配对最多 最大费用最大流拆点,对于每个点,连一条由S到该点的边,容量为b,花费为0,再连一条到T的边 对于每 ...

  9. SDOI 2016 征途 决策单调性

    题目大意:有一个数列,将其分成m段,求最小方差 先弄出n^3的dp,打出决策点,然后发现决策点是单调递增的,决策单调性搞一搞就可以了 #include<bits/stdc++.h> #de ...

随机推荐

  1. hbase 部署

    hbase的部署相对于java来说就比较简单啦,主要过程如下: 1.下载hbase最新的稳定版 2.拷贝到相应的目录 3.修改conf目录下的hbase-env.sh,设置java 和不适用内置的zo ...

  2. 6. GC 调优(工具篇) - GC參考手冊

    进行GC性能调优时, 须要明白了解, 当前的GC行为对系统和用户有多大的影响. 有多种监控GC的工具和方法, 本章将逐一介绍经常使用的工具. 您应该已经阅读了前面的章节: 垃圾收集简单介绍 - GC參 ...

  3. Log4j,Log4j2,logback,slf4j日志学习

    日志学习笔记 Log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.数据库等:我们也可以控制每一条日志的输出格式:通过定义每一条 ...

  4. Aria2 懒人安装教程

    https://aria2.github.io/ uI版:https://github.com/ziahamza/webui-aria2 web的 可以在线使用的 https://ziahamza.g ...

  5. 修改 ueditor1_4_3-utf8-php 它的图片上传地址

    本来是这样的 至少应该是在,myapp目录下吧,从myapp文件夹,我的网站才刚开始啊...你让我将来怎么设置?麻烦... 找到uploader的文件 $rootPath = $_SERVER['DO ...

  6. Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图

    接前面的Spring 4 官方文档学习(十一)Web MVC 框架,那篇太长,故另起一篇. 针对web应用的所有的MVC框架,都会提供一种呈现views的方式.Spring提供了view resolv ...

  7. find_circ 识别circRNA 的原理

    find_circ 通过识别junction reads 来预测circRNA 和参考基因组比对完之后,首先剔除和基因组完全比对的reads,保留没比对上的reads, 这部分reads 直接比是比对 ...

  8. xml的序列化与反序列化求一个好用的东西,类似,newtonsoft.net转json的东西。xml里面的结构和数据库不一致..................

    xml的序列化与反序列化求一个好用的东西,类似,newtonsoft.net转json的东西.xml里面的结构和数据库不一致..................

  9. php对gzip的使用(开启)

    gzip是一种压缩算法,在网络通信过程中,经常用到gzip压缩算法.比如一个文本文件,大小为100M,使用gzip压缩之后,大小可能会变成几M.在网络传输过程中,传10M和传100M,消耗的时间和带宽 ...

  10. php判断来访者是否是搜索引擎的蜘蛛

    我们可以通过HTTP_USER_AGENT来判断是否是蜘蛛,搜索引擎的蜘蛛都有自己的独特标志,下面列取了一部分. function is_crawler() { $userAgent = strtol ...