https://www.hackerrank.com/contests/w31/challenges

Beautiful Word 模拟

Accurate Sorting 检查每个数字距离原位是否都不超过1

Zero-One Game 计算可以被删去的数字个数

Spanning Tree Fraction 最优比率生成树,分数规划+Kruscal

Colliding Circles 算出两两圆之间最后被合并的概率,由期望的线性性计算对答案的贡献

#include<bits/stdc++.h>
typedef long double ld;
int n,k,r[];
int main(){
scanf("%d%d",&n,&k);
long long s1=,s2=;
for(int i=;i<n;++i)scanf("%d",r+i),s1+=r[i],s2+=r[i]*r[i];
ld p=;
for(int i=n;i>n-k;--i){
long long a=1ll*i*(i-);
p=p*ld(a-)/ld(a);
}
printf("%.12Lf",acos(-)*(s2+(s1*s1-s2)*(-p)));
return ;
}

Nominating Group Leaders 权值分块维护莫队,bzoj原题

#include<bits/stdc++.h>
const int N=1e5+;
int T,n,m,a[N],as[N],id[N],B,t1[N],t2[N];
struct Q{
int l,r,x,I;
bool operator<(Q w)const{
if(id[l]!=id[w.l])return id[l]<id[w.l];
if(r!=w.r)return (r<w.r)!=(id[l]&);
return I<w.I;
}
}qs[N];
int cnt[N],*l1[N],*l2[N],*l3[N],*l4[N],*r4[N];
int mem[N*],*mp;
void ins(int x,int t){
if(t){
int a=l1[x][t];
++l2[t][a];
++l3[t][a>>];
}
}
void del(int x,int t){
if(t){
int a=l1[x][t];
--l2[t][a];
--l3[t][a>>];
}
}
int find(int t){
for(int i=;i<t2[t];i+=)if(l3[t][i>>]){
int j=i;
while(!l2[t][j])++j;
return l4[t][j];
}
return -;
}
void ins(int x){
del(x,cnt[x]);
ins(x,++cnt[x]);
}
void del(int x){
del(x,cnt[x]);
ins(x,--cnt[x]);
}
int main(){
for(scanf("%d",&T);T;--T){
scanf("%d",&n);
for(int i=;i<n;++i){
scanf("%d",a+i);
}
mp=mem;
memset(mem,,sizeof(mem));
memset(cnt,,sizeof(cnt));
memset(t1,,sizeof(t1));
memset(t2,,sizeof(t2));
for(int i=;i<n;++i)++t1[a[i]];
for(int i=;i<n;++i)l1[i]=mp-,mp+=t1[i];
for(int i=;i<n;++i){
for(int j=;j<=t1[i];++j){
l1[i][j]=t2[j]++;
}
}
for(int i=;i<=n;++i){
l4[i]=r4[i]=mp,mp+=t2[i];
l3[i]=mp,mp+=t2[i];
l2[i]=mp,mp+=t2[i];
}
for(int i=;i<n;++i){
for(int j=;j<=t1[i];++j){
*r4[j]++=i;
}
}
scanf("%d",&m);
B=(n+)/sqrt(m+)+;
for(int i=;i<n;++i)id[i]=i/B;
for(int i=;i<m;++i){
scanf("%d%d%d",&qs[i].l,&qs[i].r,&qs[i].x);
qs[i].I=i;
}
std::sort(qs,qs+m);
int L=,R=-;
for(int i=;i<m;++i){
int l=qs[i].l,r=qs[i].r;
while(L>l)ins(a[--L]);
while(R<r)ins(a[++R]);
while(L<l)del(a[L++]);
while(R>r)del(a[R--]);
as[qs[i].I]=find(qs[i].x);
}
for(int i=;i<m;++i)printf("%d\n",as[i]);
}
return ;
}

Split Plane 由欧拉定理,线段划分出的联通块数=边数-点数+1+线段构成的联通块个数,扫描线处理一下,要开long long !!!

具体实现:横竖各扫一次,计算每条线段与其他线段的交点个数,特判一下端点

用可持久化线段树和并查集维护线段构成的联通块,支持插入、删除一条与扫描线垂直的线段,将当前区间内的线段标记为并起来,细节较多,具体见代码

#include<bits/stdc++.h>
#define int long long
const int N=1e5+;
struct seg{
int x,l,r;
bool operator<(seg w)const{return x!=w.x?x<w.x:l<w.l;}
}s1[N],s2[N],ss[N];
int p1,p2,ans,V,E,C;
int T,n,xs[N*],ys[N*],xp=,yp=;
void gx(int&x){x=std::lower_bound(xs,xs+xp,x)-xs;}
void gy(int&x){x=std::lower_bound(ys,ys+yp,x)-ys;} void rb(seg*a,int&ap){
std::sort(a,a+ap);
int sp=;
for(int i=,j=;i<ap;i=j){
while(j<ap&&a[i].x==a[j].x)++j;
ss[sp++]=a[i++];
for(;i<j;++i){
if(ss[sp-].r<a[i].l)ss[sp++]=a[i];
else if(ss[sp-].r<a[i].r)ss[sp-].r=a[i].r;
}
}
for(int i=;i<sp;++i)a[i]=ss[i];
ap=sp;
} struct ev{
int tp,x,a,b;
bool operator<(ev e)const{return x!=e.x?x<e.x:tp<e.tp;}
}e[N*]; int t0[N*],bit[N*];
void add(int w,int a){
if(t0[w]==||t0[w]+a==)for(int x=w+;x<N*;x+=x&-x)bit[x]+=a;
t0[w]+=a;
}
int sum(int w){
int s=;
for(++w;w;w-=w&-w)s+=bit[w];
return s;
}
int ch[N*][],p,ws[N],f[N*],pv;
bool fd[N*],ed[N*];
int gf(int x){
int a=x,c;
while(x!=f[x])x=f[x];
while(x!=f[a])c=f[a],f[a]=x,a=c;
return x;
}
int newnode(){
++p;
ch[p][]=ch[p][]=;
f[p]=p;
fd[p]=;
ed[p]=;
return p;
}
void mg(int a,int b){
f[gf(a)]=gf(b);
}
void dfs(int w){
if(fd[w])return;
fd[w]=;
for(int d=;d<;++d)if(ch[w][d]){
mg(w,ch[w][d]);
dfs(ch[w][d]);
}
}
void find(int w,int L,int R,int l,int r){
if(!w)return;
if(l<=L&&R<=r){
if(pv)mg(w,pv);
dfs(w);
pv=w;
return;
}
int M=L+R>>;
if(l<=M)find(ch[w][],L,M,l,r);
if(r>M)find(ch[w][],M+,R,l,r);
}
int ins(int w,int L,int R,int x,int y){
int u=newnode();
if(L==R){
ws[y]=u;
}else{
int M=L+R>>;
if(x<=M)ch[u][]=ins(ch[w][],L,M,x,y),ch[u][]=ch[w][];
else ch[u][]=ins(ch[w][],M+,R,x,y),ch[u][]=ch[w][];
}
return u;
}
int del(int w,int L,int R,int x){
if(L==R)return ;
int u=newnode();
int M=L+R>>;
if(x<=M)ch[u][]=del(ch[w][],L,M,x),ch[u][]=ch[w][];
else ch[u][]=del(ch[w][],M+,R,x),ch[u][]=ch[w][];
if(!ch[u][]&&!ch[u][])return ;
return u;
}
void cal(seg*a,int ap,seg*b,int bp,bool cc){
memset(t0,,sizeof(t0));
memset(bit,,sizeof(bit));
p=;
int rt=newnode();
int ep=;
for(int i=;i<ap;++i)e[ep++]=(ev){,a[i].x,a[i].l,a[i].r};
for(int i=;i<bp;++i){
e[ep++]=(ev){,b[i].l,b[i].x,i};
e[ep++]=(ev){,b[i].r+,b[i].x,i};
}
std::sort(e,e+ep);
for(int i=;i<ep;++i){
if(e[i].tp==){
int s=sum(e[i].b)-sum(e[i].a-);
V+=s;
E+=s-;
if(!t0[e[i].a])V+=,++E;
if(!t0[e[i].b])V+=,++E;
if(cc&&s){
pv=;
find(rt,,,e[i].a,e[i].b);
--C;
}
}else if(e[i].tp==){
add(e[i].a,);
if(cc)rt=ins(rt,,,e[i].a,e[i].b);
}else{
add(e[i].a,-);
if(cc)rt=del(rt,,,e[i].a);
}
}
if(cc)
for(int i=;i<bp;++i){
int a=gf(ws[i]);
if(!ed[a])ed[a]=;
else --C;
}
}
signed main(){
for(scanf("%lld",&T);T;--T){
scanf("%lld",&n);
p1=p2=;
xp=yp=;
for(int i=,x1,y1,x2,y2;i<n;++i){
scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2);
xs[xp++]=x1;
xs[xp++]=x2;
ys[yp++]=y1;
ys[yp++]=y2;
if(x1>x2)std::swap(x1,x2);
if(y1>y2)std::swap(y1,y2);
if(x1==x2)s1[p1++]=(seg){x1,y1,y2};
else if(y1==y2)s2[p2++]=(seg){y1,x1,x2};
}
std::sort(xs,xs+xp);
xp=std::unique(xs,xs+xp)-xs;
std::sort(ys,ys+yp);
yp=std::unique(ys,ys+yp)-ys;
rb(s1,p1);
rb(s2,p2);
for(int i=;i<p1;++i){
gx(s1[i].x);
gy(s1[i].l);
gy(s1[i].r);
}
for(int i=;i<p2;++i){
gy(s2[i].x);
gx(s2[i].l);
gx(s2[i].r);
}
V=E=;
C=p1+p2;
cal(s1,p1,s2,p2,);
cal(s2,p2,s1,p1,);
// printf("[V=%g E=%d C=%d]",V*.5,E,C);
printf("%lld\n",E-V/++C);
}
return ;
}

hackerrank Week of Code 31的更多相关文章

  1. 【HackerRank Week of Code 31】Colliding Circles

    https://www.hackerrank.com/contests/w31/challenges/colliding-circles/problem 设E(n)为序列长度为n时的期望值. \[ \ ...

  2. hackerrankWeek of Code 31

    hackerrankWeek of Code 31 A.Beautiful Word B.Accurate Sorting C.Zero-One Game D.Spanning Tree Fracti ...

  3. HackerRank Week of Code 26

    好像这次week of code不是很难= = A int main(){ int n; int m; cin >> n >> m; cout<<(n+)/*)/) ...

  4. 【hackerrank week of code 26】Hard Homework

    [题目链接]:https://www.hackerrank.com/contests/w26/challenges/hard-homework/problem [题意] 给你一个式子:sin(x)+s ...

  5. hackerrank [Week of Code 33] Bonnie and Clyde

    任意门 题意:给一个图,每次询问给三个点a,b,c,问是否存在一条从a到c,一条b到c的路径除c外无交点. 双连通分量缩点建出圆方树是必须的,然后我们需要判断c是否在a到b的路径上,或者c的某个相邻的 ...

  6. 【枚举约数】HackerRank - Week of Code 26 - Satisfactory Pairs

    题意:给你一个正整数n,问你存在多少个正整数对a,b(a<b),满足条件:存在正整数x,y,使得ax+by=n. 就预处理出n以内所有数的约数,然后暴力枚举a,暴力枚举x,然后枚举n-ax的所有 ...

  7. Hackerrank: Week of Code 36

    Cut a Strip 题目简述:给定$n \times m$的矩阵$a[][]$,要求选择一个$x \times 1(1 \leq x \leq k)$的(连续)子矩阵并清零后,找到最大和的(连续) ...

  8. Hadoop Exit Code 含义

    经常遇到的exception是: 1. PipeMapRed.waitOutputThreads(): subprocess failed with code N  ............ 2. T ...

  9. hive subprocess failed with code X 的错误码对应信息

    PipeMapRed.waitOutputThreads(): subprocess failed with code X ,这里code X对应的信息如下:error code 1: Operati ...

随机推荐

  1. notepad++下载32位,安装插件管理

    下载32位地址: https://notepad-plus-plus.org/download/v7.6.4.html 下载插件: 链接: https://pan.baidu.com/s/1tRSo4 ...

  2. Windows自带计算器快捷键

    今天乱翻的时候发现了这个东西,下面就是各个快捷键: (以下功能在计算器面板上均能找到) 按键 功能 F9 \(-/+\) R 1/x @ \(\sqrt{}\) Ctrl+Shift+D 清除历史记录 ...

  3. Coursera SDN M1.2.1 SDN History: Programmable Networks 2

    NOTE Capsules Example 1.Type Field: excute forwarding routine => carry program 2.Previous address ...

  4. R软件中排序:sort(),rank(),order()

    在R中,和排序相关的函数主要有三个:sort(),rank(),order().    sort(x)是对向量x进行排序,返回值排序后的数值向量.rank()是求秩的函数,它的返回值是这个向量中对应元 ...

  5. hdu3032sg打表找规律

    先打个表冷静一下 #include<map> #include<set> #include<cmath> #include<queue> #includ ...

  6. sqlplus环境设置

    1.0 --column 命令集                         改变列格式                {                column column_name1 f ...

  7. mysqldump恢复指定表

    http://blog.csdn.net/lwei_998/article/details/18860889 如果mysql服务器上不能随意安装软件,当需要从全备份中恢复单个表,怎么办? 1.mysq ...

  8. Linux修改字符集

    set NLS_LANG=american_america.AL32UTF8-----Linux下查看及更改oracle字符集编码[root@OracleDB ~]# cd /usr/local/or ...

  9. POJ 1321 棋盘问题 dfs 难度:0

    http://poj.org/problem?id=1321 注意是在'#'的地方放棋子 矩阵大小不过8*8,即使是8!的时间复杂度也足以承受,可以直接dfs求解 dfs时标注当前点的行和列已被访问, ...

  10. input输入框外联式样式控制不了字体

    1.问题背景 在做项目过程中,发现input输入框利用外联样式,控制不了输入框的样式 2.问题原因 (1)HTML代码 <!DOCTYPE html> <html> <h ...