21.6.23 test
省选 模拟赛
今天考的是一套题目背景和描述会被【数据删除】的模拟赛。
犯了几个傻逼错。
\(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改完了。
暂时不想写题解,放下代码。
\(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的更多相关文章
- JavaScript高级程序设计(第三版)学习笔记20、21、23章
第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值: ...
- C语言基础:内存 分类: iOS学习 c语言基础 2015-06-10 21:59 23人阅读 评论(0) 收藏
全局变量:定义在函数之外.(不安全) 局部变量;定义在函数之内. 内存的划分:1栈区 2堆区 3静态区(全局区) 4常量区 5代码区 栈区..静态区.常量区.代码区的数据都是由系统分配和释放 ...
- 记录21.07.23 —— Vue.js基础(二)
Vue基础(二) 过滤器 过滤器作用 全局过滤器 输出结果 私有过滤器 输出结果 把其中一个做点修改 错误信息 自定义指令 全局自定义指令 私有自定义指令 钩子函数 注意:fond-weight是粗细 ...
- Android View事件机制 21问21答
原文: http://www.cnblogs.com/punkisnotdead/p/5179115.html#3358859 1.View的坐标参数 主要有哪些?分别有什么注意的要点? 答:Left ...
- [转]Material Design Library 23.1.0的新变化与代码实战
Design Library出来已经快有一个月了,当时大概看了一下介绍这个新版本变化的译文,内容不多,给我印象最深的就是Percent lib.AppBarLayout 和NavigationView ...
- Android学习系列(23)--App主界面实现
在上篇文章<Android学习系列(22)--App主界面比较>中我们浅略的分析了几个主界面布局,选了一个最大众化的经典布局.今天我们就这个经典布局,用代码具体的实现它. 1.预览图先看下 ...
- 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: ...
- 21个值得收藏的Javascript技巧
1 Javascript数组转换为CSV格式 首先考虑如下的应用场景,有一个Javscript的字符型(或者数值型)数组,现在需要转换为以逗号分割的CSV格式文件.则我们可以使用如下的小技巧,代码如 ...
- 我的Python成长之路---第八天---Python基础(23)---2016年3月5日(晴)
socketserver 之前讲道德socket模块是单进程的,只能接受一个客户端的连接和请求,只有当该客户端断开的之后才能再接受来自其他客户端的连接和请求.当然我们也可以通过python的多线程等模 ...
随机推荐
- 74cms v3.3 后台SQL注入
注入存在于后台 admin_baiduxml.php 代码 52-63行 elseif($act == 'setsave') { $_POST['xmlmax']=intval($_POST['xml ...
- [第一篇]——Docker 教程之Spring Cloud直播商城 b2b2c电子商务技术总结
Docker 教程 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然 ...
- servlet请求转发于重定向
请求的转发与重定向是Servlet控制页面跳转的主要方法,在Web应用中使用非常广泛. 一. 请求的转发 Servlet接收到浏览器端请求后,进行一定的处理,先不进行响应,而是在服务器端内部" ...
- 在windows中给git修改默认的编辑器为sublime
首先,需要配置sublime的为环境变量,这是为了让git能通过命令调用sublime.也可以写一个.bat脚本.然后,让git调用bat脚本也可以 配置环境变量path到subl.exe的目录 脚本 ...
- elasticsearch入门到放弃之elasticsearch-head
elasticsearch-head可理解为跟DBeaver一样是一个数据可视化工具,但是这个工具并没有理想中那么好用坑也是很多,我已经在我的github上fork了一份修改后的版本:https:// ...
- DFS与DFS迷宫问题
一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道. 看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路. 输入格式 第一行输入两个整数n 和 ...
- vscode快速添加引号 批量增加引号(用于批量格式化代码)
一.在浏览器中将Params复制到pycharm的py文件中 二.选中需要添加引号的部分,Ctrl+H 调出替换工具栏 三.填写正则表达式 (.*?): (.*) '$1':'$2', 右侧注意点击使 ...
- CentOS7下编译安装redis-5.0.9
CentOS7下编译安装redis-5.0.9 本文地址http://yangjianyong.cn/?p=171转载无需经过作者本人授权 下载redis #code start wget https ...
- mysql 不常用的存储引擎
csv 数据文件可以编辑;每一列不能为空,不支持索引:文件保存数据,cat可以查看数据;用处:数据交换中间表--excel表导入数据等; Archive 对表数据进行压缩,磁盘i/o减少:节省空间;只 ...
- php页面 数组根据下标来排序
$a = [ ['id'=>1,'title'=>'星期二的早晨','author'=>'张三','date'=>'2021-6-1'], ['id'=>2,'title ...