T2好厉害啊……AK不了啦……不过要是SCOI考这套题就好了240保底。

BZOJ4819 新生舞会

模板题,分数规划+二分图最大权匹配。

费用流跑得过,可以不用KM。

UPD:分数规划用迭代跑得飞快。

#include<bits/stdc++.h>
#define pb push_back
#define FOR(i,v)\
for(typeof(v.end())i=v.begin();i!=v.end();++i)
using namespace std;
typedef double flo;
const int inf=1e9;
const int N=205;
struct edge{
int v,c;
flo w;
}e[20400];
vector<int>h[N];
int l;
void ins(int u,int v,int c,flo w){
edge a={v,c,w};
h[u].pb(l);
e[l++]=a;
edge b={u,0,-w};
h[v].pb(l);
e[l++]=b;
}
flo d[N];
int s1,s2,q[N*N],vis[N],p[N];
int n,a[N][N],b[N][N];
flo sol(flo c){
for(int i=s2;~i;--i)
h[i].clear();
l=0;
for(int i=1;i<=n;++i){
ins(s1,i,1,0);
ins(i+n,s2,1,0);
for(int j=1;j<=n;++j)
ins(i,j+n,1,a[i][j]-c*b[i][j]);
}
while(1){
fill(d,d+s2+1,-inf);
d[q[0]=s1]=0;
for(int a=0,b=0;a<=b;++a){
int u=q[a];
vis[u]=0;
FOR(i,h[u])
if(d[u]+e[*i].w>d[e[*i].v]&&e[*i].c){
d[e[*i].v]=d[u]+e[*i].w;
p[e[*i].v]=*i;
if(!vis[e[*i].v]++)
q[++b]=e[*i].v;
}
}
if(d[s2]==-inf)
break;
int f=inf;
for(int i=s2;i!=s1;i=e[p[i]^1].v)
f=min(f,e[p[i]].c);
for(int i=s2;i!=s1;i=e[p[i]^1].v){
e[p[i]].c-=f;
e[p[i]^1].c+=f;
}
}
flo p=0,q=0;
for(int u=1;u<=n;++u)
FOR(i,h[u])
if(!e[*i].c){
p+=a[u][e[*i].v-n];
q+=b[u][e[*i].v-n];
}
return p/q;
}
int main(){
scanf("%d",&n);
s2=n*2+1;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
scanf("%d",a[i]+j);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
scanf("%d",b[i]+j);
flo l=1;
while(1){
flo j=sol(l);
if(fabs(j-l)<1e-8)
return!printf("%.6f\n",j);
l=j;
}
}

BZOJ4820 硬币游戏

设$f_i$为经过$i$的次数的期望。把所有非终止态记为一个状态$p$,考虑$p$加上一个人的串,可能直接到对应的终止态,也可能先到其他终止态(可能是自己),因此要减去其他终止态的贡献。比如终止态$x$、$y$的串分别为TTH、HTT,那么$p$+TTH可能是$y$+TH或$y$+H,因此$f_x=\frac18f_p-\frac34f_y$,因为$p$有$\frac18$的概率到$x$,其中到了$y$的话有$\frac34$的概率到$x$。可能先到其他终止态的情况也就是其他串的后缀匹配了当前串的前缀,可以用kmp计算。列出这些方程后高斯消元即可。

#include<bits/stdc++.h>
using std::swap;
typedef long double flo;
const int N=302;
int n,m,f[N];
char z[N][N];
flo c[N][N];
void piv(int i){
int j=i;
for(int k=i+1;k<=n;++k)
if(fabs(c[k][i])>fabs(c[j][i]))j=k;
for(int k=i;k<=n+1;++k)
swap(c[i][k],c[j][k]);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<n;++i)
scanf("%s",z[i]);
f[0]=-1;
for(int i=0;i<n;++i){
int j=0,k=-1;
while(j<m){
while(~k&&z[i][j]!=z[i][k])k=f[k];
f[++j]=++k;
}
for(int l=0;l<n;++l){
j=k=0;
while(j<m){
while(~k&&z[l][j]!=z[i][k])k=f[k];
++j,++k;
}
for(;k;k=f[k])
c[i][l]+=pow(.5l,m-k);
}
c[i][n]=-pow(.5l,m);
c[n][i]=1;
}
c[n][n+1]=1;
for(int i=0;i<=n;++i){
piv(i);
for(int j=n+1;j>=i;--j)
c[i][j]/=c[i][i];
for(int j=0;j<=n;++j)
if(i!=j)
for(int k=n+1;k>=i;--k)
c[j][k]-=c[j][i]*c[i][k];
}
for(int i=0;i<n;++i)
printf("%.10f\n",double(c[i][n+1]));
}

BZOJ4821 相关分析

简单线段树,维护$\sum x$、$\sum y$、$\sum xy$、$\sum x^2$以及两种标记。

#include<cstdio>
#define P (k<<1)
#define S (P^1)
typedef long double flo;
const int N=1e5+5;
flo cal1(flo n){return n*(n-1)/2;}
flo cal2(flo n){return n*(n-1)*(n*2-1)/6;}
struct vec{flo a,b,c,d;};
vec operator+(vec a,vec b){
vec c={
a.a+b.a,a.b+b.b,a.c+b.c,a.d+b.d
};
return c;
}
struct node{
int i,j,n;
vec s;
flo xd,yd,xc,yc;
bool d,c;
void upd1(flo x,flo y){
if(!d)
xd=x,yd=y,d=1;
else
xd+=x,yd+=y;
s.c+=y*s.a+x*s.b+n*x*y;
s.d+=x*s.a*2+n*x*x;
s.a+=n*x;
s.b+=n*y;
}
void upd2(flo x,flo y){
xc=x,yc=y,c=1,d=0;
flo a=x+i,b=y+i;
s.a=n*a+cal1(n);
s.b=n*b+cal1(n);
s.c=n*a*b+cal1(n)*(a+b)+cal2(n);
s.d=n*a*a+cal1(n)*a*2+cal2(n);
}
}a[N*4];
void down(int k){
if(a[k].c){
a[P].upd2(a[k].xc,a[k].yc);
a[S].upd2(a[k].xc,a[k].yc);
a[k].c=0;
}
if(a[k].d){
a[P].upd1(a[k].xd,a[k].yd);
a[S].upd1(a[k].xd,a[k].yd);
a[k].d=0;
}
}
void upd1(int k){
a[k].s=a[P].s+a[S].s;
}
void upd2(int k){
a[k].i=a[P].i;
a[k].j=a[S].j;
a[k].n=a[P].n+a[S].n;
upd1(k);
}
int f[N],g[N];
void pre(int i,int j,int k){
if(i==j){
flo x=f[i],y=g[i];
a[k]=(node){i,j,1,x,y,x*y,x*x};
}else{
pre(i,i+j>>1,P);
pre((i+j>>1)+1,j,S);
upd2(k);
}
}
void inc(flo x,flo y,int s,int t,int k){
if(s<=a[k].i&&a[k].j<=t)
a[k].upd1(x,y);
else{
down(k);
if(s<a[S].i)inc(x,y,s,t,P);
if(t>a[P].j)inc(x,y,s,t,S);
upd1(k);
}
}
void cov(flo x,flo y,int s,int t,int k){
if(s<=a[k].i&&a[k].j<=t)
a[k].upd2(x,y);
else{
down(k);
if(s<a[S].i)cov(x,y,s,t,P);
if(t>a[P].j)cov(x,y,s,t,S);
upd1(k);
}
}
vec ask(int s,int t,int k){
if(s==a[k].i&&a[k].j==t)
return a[k].s;
down(k);
return t<a[S].i?ask(s,t,P):s>a[P].j?ask(s,t,S):ask(s,a[P].j,P)+ask(a[S].i,t,S);
}
int main(){
int n,m,o,s,t,x,y;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)scanf("%d",f+i);
for(int i=1;i<=n;++i)scanf("%d",g+i);
pre(1,n,1);
while(m--){
scanf("%d%d%d",&o,&s,&t);
if(o==1){
vec v=ask(s,t,1);
int n=t-s+1;
printf("%.10f\n",double((v.c-v.a*v.b/n)/(v.d-v.a*v.a/n)));
}else{
scanf("%d%d",&x,&y);
(o==2?inc:cov)(x,y,s,t,1);
}
}
}

SDOI2017 Round1 Day2 题解的更多相关文章

  1. SDOI2017 Round1 简要题解

    我们 TM 怎么又要上文化课..我 哔哔哔哔哔哔 「SDOI2017」数字表格 题意 有 \(T\) 组数据,求 \[ \prod_{i = 1}^{n} \prod_{j = 1}^{m} fib[ ...

  2. SDOI2017 Round1 Day1 题解

    不知道有几个AK的,除了出题人SB搬了个BZOJ3779以外,应该没什么因素阻碍AK吧.要是SCOI考这套题多好. BZOJ4816 数字表格 SB反演,推出答案为$\prod_{i=1}^nf^{\ ...

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

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

  4. SDOI2017 Round1

    SDOI2017 Round1 在回去的车上写的 cnblog的markdown貌似有bug,空行都没有了 Day -several [清明节] 没想到在省选之前还会有一次放假 放假前一天晚上走到校门 ...

  5. SDOI2017 Round1 起点

    第二次打酱油了 高一两次考试以打两瓶酱油告终 来的时候明知自己没戏,却总存有一丝希望 NOIP连200都没考到,是不是有点儿不自量力 如果我真的去争取那一丝希望的话,该有多好 先简单分析下考试 Day ...

  6. SDOI2017 Round2 详细题解

    这套题实在是太神仙了..做了我好久...好多题都是去搜题解才会的 TAT. 剩的那道题先咕着,如果省选没有退役就来填吧. 「SDOI2017」龙与地下城 题意 丢 \(Y\) 次骰子,骰子有 \(X\ ...

  7. NOIP2013 DAY2题解

    DAY2 T1积木大赛 传送门 题目大意:每次可以选区间[l,r]加1,最少选几次,让每个位置有 它应有的高度. 题解:O(n)扫一遍就好了.后一个比前一个的高度低,那么前一个已经把它覆盖了, 如果高 ...

  8. 二模Day2题解

    小明搬家 题目描述 小明要搬家了,大家都来帮忙. 小明现在住在第N楼,总共K个人要把X个大箱子搬上N楼. 最开始X个箱子都在1楼,但是经过一段混乱的搬运已经乱掉了.最后大家发现这样混乱地搬运过程效率太 ...

  9. 【NOIP2012】DAY1+DAY2题解

    不贴代码的原因是我的代码在初中机房.忘记带过来了. DAY 1 T1随便搞,但是字符串相关的题我经常犯蠢 T2 一个结论题,OAO但是需要高精度写. 具体就是按左手的数除右手的数(还是怎么的来着)排个 ...

随机推荐

  1. win10 sublime license

    —– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA ...

  2. 如何让你的服务屏蔽Shodan扫描

    1. 前言 在互联网中,充斥着各种各样的网络设备,shodan等搜索引擎提供给了我们一个接口,让我们可以在输入一些过滤条件就可以检索出网络中相关的设备. 对于我们的一些可能有脆弱性或者比较隐私的服务, ...

  3. 表现层 JSP 页面实现

    一.实验介绍 1.1 实验内容 本节课程主要利用 easyUI 实现系统的前端页面. 1.2 实验知识点 easyUI JavaScript html 1.3 实验环境 JDK1.8 Eclipse ...

  4. maximum-depth-of-binary-tree——找出数的最大深度

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  5. js eval 解析字符串

    //带变量的字符串var str = 'var a=1; var b=2;'; eval(str); alert(a+b);//结果 3: //数组字符串var arrStr = "[1,2 ...

  6. mysql 修改表引擎方法

    修改表引擎方法 方法1:修改mysql.ini配置文件,重启mysql服务生效 修改my.ini,在[mysqld]下加上default-storage-engine=INNODB 其中红色字体部分是 ...

  7. js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式

    js replace 全局替换   js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...

  8. 2016年第七届蓝桥杯c/c++省赛B组

    2016年第七届蓝桥杯c/c++省赛B组 声明:以下答案是我自己做的.不能保证正确,须要參考正确答案的请到其它地方找. 第一题 :煤球数目 题目叙述: 有一堆煤球,堆成三角棱锥形.详细: 第一层放1个 ...

  9. Cocos2d-X中提高性能的方法

     1)内存使用效率: 使用大纹理 场景切换时,要尽量使用replaceScene 2)用好缓存: CCTextureCache(纹理缓存) CCSpriteFrameCache(精灵帧缓存) CC ...

  10. HDFS源代码分析(二)-----元数据备份机制

    前言 在Hadoop中,全部的元数据的保存都是在namenode节点之中,每次又一次启动整个集群,Hadoop都须要从这些持久化了的文件里恢复数据到内存中,然后通过镜像和编辑日志文件进行定期的扫描与合 ...