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. jquery获取<div></div>之间的内容.text() 和 .html()区别

    jQuery 获取 div 之间的内容,有两种方法,$(selector).text().$(selector).html() . html: <div> <p>test< ...

  2. Python学习笔记8:标准库之正則表達式

    Python拥有强大的标准库.从如今起,開始学习标准库中提供的一些经常使用功能. 首先看正則表達式(regular expression),它的主要功能是从字符串(string)中通过特定的模式(pa ...

  3. css3 - target

    通过CSS3伪元素target,我们可以实现拉风琴 源码 <!DOCTYPE HTML> <html lang="en-US"> <head> ...

  4. android4.4 evaluateJavascript 到android2.X上不能调用的问题

    android4.4上想用js注入的话.不能用旧的loadUrl()方法,每次load都会将页面又一次刷新一次. 可是在2.X的系统版本号上,evaluateJavascript 方法会报异常.解决的 ...

  5. uboot下载地址

    非常奇怪百度搜索都搜不到一个好的uboot下载的说明,仅此标记 HOME http://www.denx.de/wiki/U-Boot/SourceCode sourcecode http://www ...

  6. 【转】git在公司内部的使用实践

    版本定义: 版本号使用x.x.x进行定义,第一个x代表大版本只有在项目有重大变更时更新 第二个x代表常规版本有新需求会更新第三个x代表紧急BUG修正一个常见的版本号类似于:0.11.10 分支定义: ...

  7. iOS 图像处理-剪裁图像

    解决这个问题:依照某一长宽比例,剪裁图片的上部和下部.保留中间的内容.当然也能够自己定义须要剪裁留下的区域 前提:须要加入Framework:CoreGraphics.framework 代码: - ...

  8. 解决Linq.ToDictionary()时的键重复问题

    今天在使用 Linq 的 ToDictionary() 时发生了异常,提示: System.ArgumentException: 已添加了具有相同键 因为以前一直没有遇到有相同键的情况,所以从来没关注 ...

  9. PHP基础函数、自定义函数以及数组

    2.10 星期五  我们已经真正开始学习PHP 了,今天的主要内容是php基础函数.自定义函数以及数组, 内容有点碎,但是对于初学者来说比较重要,下面是对今天所讲内容的整理:  1 php的基本语法和 ...

  10. Storage Types and Storage Policies

    https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html Introduc ...