省选 模拟赛

今天考的是一套题目背景和描述会被【数据删除】的模拟赛。

犯了几个傻逼错。

\(T1\) 把两种情况的概率看反了,写的暴力。\(35->5\) pts.

\(T2\) 以为想到了正解,写了一堆树剖线段树甚至还有树上差分,码农一样码了一半发现比暴力的复杂度只有玄学优化了一些,不过可以过两个部分分。\(40\) pts.

\(T3\) 直接输出“infinity”就有20分,但是我稍微挣扎了一下,写了个if else,挣扎失败后 if 没删干净就交了/ll。CE \(20->0\) pts.


省选难度于是要尝试赛后AK。


艹,头一次发现我这么菜,看了一个下午加一个晚上,愣是没改完T1。


update on 21.6.24

T1T2改完了。

暂时不想写题解,放下代码。

两道题分别是T1T2

\(T1\):

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
ll n;ld p;
ld ans1(){
ll t=1;
ld ans=0;
while(t<=n){
double k=double(n/t/2*t)/n+double(max(0LL,n%(t*2)-t))/n;
ans+=2*k*(1-k)*t;
t*=2;
}
return ans;
}
ll a[101],an,k;
ld ans3(ll m,int an){
if(an==1){
if(a[an]==0)return 1.0/n;
else return 2.0/n;
}
ll t=pow(2,an-1);
ld ans=0;
if(a[an]==1){
ans+=double(t)/n*(m+t);
ans+=ans3(m/2,an-1);
}
else{
ans+=double(t)/n*t;
ans+=2*ans3(m/2,an-1);
}
return ans;
}
ld ans2(ll m){
if(m==0)return 0;
memset(a,0,sizeof(a));
an=0,k=m;
while(k){
if(k&1)a[++an]=1;
else a[++an]=0;
k>>=1;
}
ll t=pow(2,an-1);
ld ans=double((t*2-1))/n*(m-t+1)+double(t)/n*t;
if(an>1) ans+=ans3(t-1,an-1);
return ans;
}
signed main(){
scanf("%lld%Lf",&n,&p);
printf("%.6Lf",p*ans2(n-1)+(1-p)*ans1());
return 0;
}

\(T2\):

#include<bits/stdc++.h>
using namespace std;
#define in read()
#define int long long
const int N=300005;
inline int read(){
int p=0,f=1;
char c=getchar();
while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){p=p*10+c-'0';c=getchar();}
return p*f;
}
struct edge{
int v,next;
}e[2*N];
int head[N],en;
void insert(int u,int v){
e[++en].v=v;
e[en].next=head[u];
head[u]=en;
}
int n,q;
int fa[N],deep[N],size[N],dfn[N],df;
void dfs(int p,int f){
size[p]=1;fa[p]=f;deep[p]=deep[f]+1;dfn[p]=++df;
for(int i=head[p];i;i=e[i].next){
int v=e[i].v;
if(v==f)continue;
dfs(v,p);
size[p]+=size[v];
}
}
//segment_tree---------------
#define sum(x) st[x].sum
#define ls(x) st[x].ls
#define rs(x) st[x].rs
int rt[N],tot=1;
struct node{
int sum,ls,rs;
}st[N<<6];
int built(int p,int l,int r){
if(l==r)return p;
int mid=(l+r)>>1;
ls(p)=built(++tot,l,mid);
rs(p)=built(++tot,mid+1,r);
return p;
}
void cover(int p,int pre){
sum(p)=sum(pre);
ls(p)=ls(pre);
rs(p)=rs(pre);
}
void newroot(int x){
rt[x]=++tot;
cover(rt[x],rt[x-1]);
}
void modify(int &now,int pre,int l,int r,int pos,int d){
now=++tot;
cover(now,pre);
sum(now)+=d;
if(l==r&&l==pos)return ;
int mid=(l+r)>>1;
if(pos<=mid)modify(ls(now),ls(now),l,mid,pos,d);
else modify(rs(now),rs(now),mid+1,r,pos,d);
}
int query(int now,int l,int r,int ql,int qr){
if(l>=ql&&r<=qr) return sum(now);
int mid=(l+r)>>1,res=0;
if(ql<=mid)res+=query(ls(now),l,mid,ql,qr);
if(qr>mid)res+=query(rs(now),mid+1,r,ql,qr);
return res;
}
//---------------------------
signed main(){
//freopen("data.in","r",stdin);
//freopen("mine.out","w",stdout);
n=in,q=in;rt[0]=1;
for(int i=1;i<n;i++){
int u=in,v=in;
insert(u,v);
insert(v,u);
}
dfs(1,0); built(1,1,n);
newroot(1);
queue<int> qu;qu.push(1);
int tem=0,temp=1,last=1;df=1;
while(!qu.empty()){
int p=qu.front();qu.pop();
modify(rt[df],rt[df],1,n,dfn[p],size[p]-1);
for(int i=head[p];i;i=e[i].next){
int v=e[i].v;
if(v==fa[p])continue;
qu.push(v);
last++;
}
tem++;
if(tem==temp){
df++;
temp=last;
newroot(df);
}
}
df--; for(int i=1;i<=q;i++){
int p=in,k=in,ans=0;
ans+=min(deep[p]-1,k)*(size[p]-1);
int x=deep[p],y=min(deep[p]+k,df);
if(x<=y&&size[p]-1)
ans+=query(rt[y],1,n,dfn[p]+1,dfn[p]+size[p]-1)-query(rt[x],1,n,dfn[p]+1,dfn[p]+size[p]-1);
printf("%lld\n",ans);
}
return 0;
}

21.6.23 test的更多相关文章

  1. JavaScript高级程序设计(第三版)学习笔记20、21、23章

    第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值: ...

  2. C语言基础:内存 分类: iOS学习 c语言基础 2015-06-10 21:59 23人阅读 评论(0) 收藏

    全局变量:定义在函数之外.(不安全)   局部变量;定义在函数之内. 内存的划分:1栈区   2堆区  3静态区(全局区) 4常量区 5代码区 栈区..静态区.常量区.代码区的数据都是由系统分配和释放 ...

  3. 记录21.07.23 —— Vue.js基础(二)

    Vue基础(二) 过滤器 过滤器作用 全局过滤器 输出结果 私有过滤器 输出结果 把其中一个做点修改 错误信息 自定义指令 全局自定义指令 私有自定义指令 钩子函数 注意:fond-weight是粗细 ...

  4. Android View事件机制 21问21答

    原文: http://www.cnblogs.com/punkisnotdead/p/5179115.html#3358859 1.View的坐标参数 主要有哪些?分别有什么注意的要点? 答:Left ...

  5. [转]Material Design Library 23.1.0的新变化与代码实战

    Design Library出来已经快有一个月了,当时大概看了一下介绍这个新版本变化的译文,内容不多,给我印象最深的就是Percent lib.AppBarLayout 和NavigationView ...

  6. Android学习系列(23)--App主界面实现

    在上篇文章<Android学习系列(22)--App主界面比较>中我们浅略的分析了几个主界面布局,选了一个最大众化的经典布局.今天我们就这个经典布局,用代码具体的实现它. 1.预览图先看下 ...

  7. Gradle sync failed: failed to find Build Tools revision 21.1.2

    从github上下载了一个开源项目到Android Studio 出现以下问题: 下午2:56:05 Gradle sync started下午3:00:11 Gradle sync failed: ...

  8. 21个值得收藏的Javascript技巧

    1  Javascript数组转换为CSV格式 首先考虑如下的应用场景,有一个Javscript的字符型(或者数值型)数组,现在需要转换为以逗号分割的CSV格式文件.则我们可以使用如下的小技巧,代码如 ...

  9. 我的Python成长之路---第八天---Python基础(23)---2016年3月5日(晴)

    socketserver 之前讲道德socket模块是单进程的,只能接受一个客户端的连接和请求,只有当该客户端断开的之后才能再接受来自其他客户端的连接和请求.当然我们也可以通过python的多线程等模 ...

随机推荐

  1. Jupyter Notebook 修改字体和大小

    1 打开这个目录 D:\SoftWare\Anaconda\Lib\site-packages\notebook\static\custom 点开这个 也就是你安装的 python下面的 jupyte ...

  2. python字典时间日期

    字典时间日期 学习完本篇,你将会深入掌握 字典操作. 1.如何新建一个字典 2.如何正序以及反序访问字典 3.如何更新字典元素 4.如何删除字典 日期时间操作 1.如何打印一个2021-9-20 17 ...

  3. SpringCloudAlibaba - 整合 Nacos 实现服务注册与发现

    目录 前言 环境 Nacos是什么? 服务发现原理 搭建 Nacos Server Nacos Server 下载地址 Nacos Server 的版本选择 运行 Nacos Server Nacos ...

  4. 远程线程注入突破SESSION 0

    远程线程注入突破SESSION 0 SESSION 0 隔离 在Windows XP.Windows Server 2003,以及更老版本的Windows操作系统中,服务和应用程序使用相同的会话(Se ...

  5. HTML基本概念及基本标签

    HTML基本概念及基本语法 1.HTML的基本概念 1.1  B/S.C/S基本概念 B/S(Browser/Server):指的是浏览器端与服务器端工作模式,优点相对节省本地存储空间,不足是需要占用 ...

  6. .Net Core with 微服务 - 分布式事务 - 可靠消息最终一致性

    前面我们讲了分布式事务的2PC.3PC , TCC 的原理.这些事务其实都在尽力的模拟数据库的事务,我们可以简单的认为他们是一个同步行的事务.特别是 2PC,3PC 他们完全利用数据库的事务能力,在一 ...

  7. Jvm调优理论篇

    Jvm实战调优 OOM(Out Of Memory) 内存溢出错误 ps:由于Java虚拟机有许多实现,本文主要阐述的是OpenJDK的HotSpot虚拟机,JDK版本是8. 一.首先要明白造成OOM ...

  8. 记一次 .NET 某上市工业智造 CPU+内存+挂死 三高分析

    一:背景 1. 讲故事 上个月有位朋友加wx告知他的程序有挂死现象,询问如何进一步分析,截图如下: 看这位朋友还是有一定的分析基础,可能玩的少,缺乏一定的分析经验,当我简单分析之后,我发现这个dump ...

  9. Java基础系列(26)- 打印三角形

    package struct; public class TestDemo { public static void main(String[] args) { for (int i = 1; i & ...

  10. Docker DevOps实战:GitLab+Jenkins(1)- GitLab容器搭建、使用SourceTree pull/push项目

    GitLab容器搭建 # 创建GitLab容器# --restart always #重启,容器自动重启# --privileged=true #容器内使用root权限 [root@localhost ...