Nescafe #29 NOIP模拟赛

  不知道这种题发出来算不算侵权...毕竟有的题在$bz$上是权限题,但是在$vijos$似乎又有原题...如果这算是侵权的话请联系我,我会尽快删除,谢谢~

  今天开始就处于一种半停课状态了.学校学习衡水,把休息时间压缩后每天又多了两节自习来写作业,但是我正好就可以来机房啦2333

  因为考试时间被文化课分割成了一些散块,这里就不区分考试时的代码和赛后补题了.

  

  T1:穿越七色虹

  题意概述:给出$x$轴上的$7$个圆(圆心和半径)(只保留$x$轴以上的部分),可以将所有圆的半径同时增加一个非负数,要求$(0,0)$到$(X_0,h)$这一块矩形面积被完全覆盖。

  其实这题读题稍微有点困难,不过概括之后就好理解多了。

  其实这题思路挺显然的,半径越大肯定覆盖的面积越大,所以直接二分这个扩大的值,扩大之后算出每个圆可以覆盖的高度为$h$的矩形的左右端点,再做一个线段覆盖即可.这里注意一个问题:$check$时会首先把每个半径加上一个数,最后再减掉,如果是这样的做法就一定要注意不能在函数进行到一半时就$return$掉,否则这个增量就会一直留在那里啦.

  

 # include <cstdio>
# include <iostream>
# include <cmath>
# include <algorithm> using namespace std; const double eps=0.001;
double h,x0;
double x[],rr[],l,r,mid,ans;
struct lin
{
double l,r;
}a[]; bool check (double ad)
{
double maxr=,minl=;
for (int i=;i<=;++i)
{
a[i].l=x[i]-sqrt((rr[i]+ad)*(rr[i]+ad)-h*h);
a[i].r=x[i]+sqrt((rr[i]+ad)*(rr[i]+ad)-h*h);
minl=min(minl,a[i].l);
}
if(minl>eps) return false;
for (int i=;i<=;++i)
for (int j=;j<=;++j)
if(a[j].l-maxr<=eps) maxr=max(maxr,a[j].r);
if(maxr-x0>=-eps) return true;
return false;
} int main()
{
scanf("%lf%lf",&h,&x0);
for (int i=;i<=;++i)
scanf("%lf%lf",&x[i],&rr[i]);
l=,r=sqrt(x0*x0+h*h);
ans=r+; while (r-l>=-eps)
{
mid=(l+r)/2.0;
if(check(mid))
ans=min(ans,mid),r=mid-eps;
else l=mid+eps;
}
printf("%.2lf",ans);
return ;
}

rainbow

  T2:四叶草魔杖

  题意概述:给出$n$个点$m$条边,每个点有一个能量值,如果是负的意味着要有这么多能量通过边运输过来,正的则为要运走这么多,每条边只要用到就会产生相应的代价,求使所有点的能量值都变为$0$所需要的最小代价.$n<=16$

  看到$n$这么小的范围当然会想到搜索状压$dp$.首先所有点都被连到一起必然是合法的,但是想要合法并不需要所有点都连在一起.首先一遍状压$dp$求出每个联通块联通的最小代价,统计一下哪些联通块的权值和是$0$,把这些状态单独拿出来再进行一次状压$dp$即可,虽然复杂度不是非常科学,但是跑的还是挺快的.

  

 # include <cstdio>
# include <iostream>
# include <cstring>
# define R register int using namespace std; const int maxn=;
const int maxz=(<<);
int n,m,h,firs[maxn];
int dp[maxz+],a[maxn],x,y,co,j;
struct edge
{
int too,nex,co;
}g[maxn*maxn];
int k[maxz+],Top=,c[maxz+]; void add (int x,int y,int co)
{
g[++h].co=co;
g[h].nex=firs[x];
firs[x]=h;
g[h].too=y;
} int main()
{
memset(dp,-,sizeof(dp));
dp[]=;
scanf("%d%d",&n,&m);
for (R i=;i<n;++i)
scanf("%d",&a[i]);
for (R i=;i<n;++i)
dp[<<i]=;
for (R i=;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&co);
add(x,y,co);
add(y,x,co);
}
for (R z=;z<=(<<n)-;++z)
{
if(dp[z]==-) continue;
for (R i=;i<n;++i)
{
if((z&(<<i))==) continue;
for (R b=firs[i];b;b=g[b].nex)
{
j=g[b].too;
if(z&(<<j)) continue;
if(dp[z|(<<j)]==-)
dp[z|(<<j)]=dp[z]+g[b].co;
else
dp[z|(<<j)]=min(dp[z|(<<j)],dp[z]+g[b].co);
}
}
}
for (R i=;i<=(<<n)-;++i)
{
int s=;
if(dp[i]==-) continue;
for (R j=;j<n;++j)
if((<<j)&i) s+=a[j];
if(s==) k[++Top]=i,c[Top]=dp[i];
}
memset(dp,-,sizeof(dp));
dp[]=;
for (R i=;i<=(<<n)-;++i)
{
if(dp[i]==-) continue;
for (R j=;j<=Top;++j)
{
if(dp[ i|k[j] ]==-) dp[ i|k[j] ]=dp[i]+c[j];
else dp[ i|k[j] ]=min(dp[ i|k[j] ],dp[i]+c[j]);
}
}
if(dp[(<<n)-]==-) printf("Impossible");
else printf("%d",dp[(<<n)-]);
return ;
}

clover

  T3:圣主的考验

  题意概述:定义一棵合法的二叉树为:每个点的左右儿子的高度差不大于$1$,求包含$n$个节点的树有多少种可能形态.$n<=3000$.注意:如果答案大于九位就输出后九位(包括前导零),如果小于九位就原样输出.

  朴素的$dp$不是很难想,但是是$n^3$的,现在在这个基础上考虑优化:(我又把$vscode$找出来啦,虽然编译的部分失效了,但是即使只是做文本编辑器也足够好看了)

  

  这个复杂度很显然是跑不满的,尤其是第二维,因为这道题的限制卡的比较严格,所以左右子树的节点数量大致上不会相差非常多,也就是说树高趋向于$log$级别.完全二叉树的深度是所有可能中最浅的,最深的深度也不会大很多,最极端的情况是每个左儿子都比右儿子的深度大,不过直接认为是$logi$加上一个小一点的数字也是可以的.如果发现一个多维$dp$的复杂度过高而明显跑不满时,可以将自己觉得最有可能跑不满的一维直接改小,比如这里的$j$直接改成$1-10$可以得到$90$.关于输出:打表发现当$n$大于等于$36$的时候答案会大于九位...

  

 # include <cstdio>
# include <iostream>
# define R register int
# define mod using namespace std; const int maxn=;
int n,lg[maxn];
long long dp[maxn][],s[maxn]; void init()
{
dp[][]=;
dp[][]=;
s[]=;
for (R i=;i<=;++i)
for (R j=lg[i]+;j<=lg[i]+;++j)
{
for (R l=;l<=i;++l)
{
if(i-l-<) break;
dp[i][j]+=dp[l][j-]*dp[i-l-][j-];
dp[i][j]%=mod;
dp[i][j]+=dp[l][j-]*dp[i-l-][j-];
dp[i][j]%=mod;
dp[i][j]+=dp[l][j-]*dp[i-l-][j-];
dp[i][j]%=mod;
}
s[i]+=dp[i][j];
s[i]%=mod;
}
} int main()
{
scanf("%d",&n);
for (R i=;i<=;++i)
lg[i]=lg[i/]+;
init();
while (n)
{
if(n>=) printf("%09lld\n",s[n]);
else printf("%lld\n",s[n]);
scanf("%d",&n);
}
return ;
}

domine

---shzr

Nescafe #29 NOIP模拟赛的更多相关文章

  1. 2016.10.29 NOIP模拟赛 PM 考试整理

    300分的题,只得了第三题的100分. 题目+数据:链接:http://pan.baidu.com/s/1o7P4YXs 密码:4how T1:这道题目存在着诸多的问题: 1.开始的序列是无法消除的( ...

  2. NOIP模拟赛 6.29

    2017-6-29 NOIP模拟赛 Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走, ...

  3. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  4. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  5. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  6. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  7. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  8. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  9. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

随机推荐

  1. office web app server部署和简单操作

    部署环境:windows server 2012 R2,服务器在AD域中 参考网址: https://msdn.microsoft.com/zh-cn/magazine/jj219455(office ...

  2. Oracle XE快捷版(速成版)的限制

    1.CPU上限:无论把数据库安装在多少核的服务器上,都只会提供一个CPU核心的运算能力 2.安装和执行限制:只能安装一个实例且只能运行一个实例 3.用户数据上限:最大11G的用户数据 4.内存使用上限 ...

  3. centos 中设置网卡等相关参数

    转:Centos启动和禁用网卡命令 ifup.ifdown:linux命令 实时地手动修改一些网络接口参数,可以利用ifconfig来实现,如果是要直接以配置文件,在  /etc/sysconfig/ ...

  4. vue2.0 移动端,下拉刷新,上拉加载更多 插件

    本人正在基于 vue2.0 + webpack + es6 搭建前端架构,整理了部分插件,下面这个是下拉更新 上拉更多的,挺好用的,分享给大家. 直接上代码,不懂的多看几遍,下面我换会告诉大家如何使用 ...

  5. 集合框架四(Map)

    Map的主要实现类: --HashMap:Map的主要实现类(掌握) --LinkedHashMap:使用链表维护添加进Map中的顺序,遍历时按添加时的顺序遍历 --TreeMap:按照添加进Map中 ...

  6. 排序算法(5)--Selection Sorting--选择排序[2]--Heap Sort--堆排序

    1.基本思想 具有n个元素的序列 (h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1) (i=1,2,...,n ...

  7. SD从零开始59-61,跨公司的库存转移,Interface 修改,可用性检查和需求传递

    [原创]SD从零开始59 跨公司的库存转移处理流程 库存转移流程Stock Transfer Procedure 2个工厂间的库存转移能够使用不同的流程来执行: 只执行一个库存转移记账的流程使用MM库 ...

  8. fastjson 反序列化漏洞利用总结

    比赛遇到了,一直没利用成功,这里做个记录. 环境搭建 首先用 vulhub 搭建 fastjson 的漏洞环境. 漏洞环境程序的逻辑为接收 body 的数据然后用 fastjson 解析. 漏洞利用 ...

  9. ethernaut 以太坊靶场学习 (1-12)

    前言 这个靶场搜集了许多不同的 solidity 开发的问题,通过这个可以入门 区块链安全 Fallback 给出了源码 pragma solidity ^0.4.18; import 'zeppel ...

  10. .NET笔试题集(五)

    转载于:http://www.cnblogs.com/ForEvErNoME/archive/2012/09/15/2684938.html 1.什么是受管制的代码? 答:unsafe:非托管代码.不 ...