noip模拟测试20
考试总结:这次考试,我非常真实地感觉到了自己能力的提高,具体来说,在之前的考试中,读完题之后我只会想到暴力的思路,甚至有的题连暴力都打不出来,但是这次在考场上我已经有了自己的一些想法,有了一个深入思考的过程,自己演算,推式子也写了几张草稿纸,对于测试点的部分分也有了一定的把握。在改题的时候,我基本上都是研究下发的题解自己该出来的,总之,这几次考试我的收获很大,所有的付出都是值得的。
T1 玩具
思路:我们模拟一下操作过程,那么很显然,最终得到的应该是一颗树,那么如果我们不看 1 结点,那么应该是一个森林,这道题是个 dp,我们设i个点的森林,有j个点在第一颗树的概率\(dp_{i,j}=dp_{i-1,j-1}\times(j-1)\times(inv_i)+dp_{i-1,j}\times(i-j)\times(inv_i)\)设第一棵树有i 个点,深度不超过j的概率 \(f_{i,j}=g_{i-1,j-1}\),设有i个点的森林,深度不超过j的概率 \(g_{i,j}=\sum\limits_{k=1}^{i}f_{k,j}\times g_{i-k,j}\times {dp_{i,k}}\),这个方程式比较好理解,可以结合画图理解,那么注意细节问题就是在转移的时候,我们可以用刷表法,即用当前的更新后面的,还要注意当前枚举不到的状态要在当前转移过去v,具体实现见代码:
AC_Code
#include<bits/stdc++.h>
#define int long long
#define re register int
#define lc rt<<1
#define rc rt<<1|1
#define mid ((l+r)>>1)
#define re register int
#define ii inline int
#define iv inline void
using namespace std;
const int N=210;
long long n,p,ans;
int inv[N],g[N][N],f[N][N],dp[N][N];
ii read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=0;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return (f)?x:(-x);
}
#undef int
int main()
{
/*
i个点的森林,有j个点在第一颗树的概率
dp[i][j]=dp[i-1][j-1]*(j-1)*inv[i]+dp[i-1][j]*(i-j)*inv[i];//拿出j-1个,加上拿另外的 i-j个
i个点的树,深度不超过j的概率
f[i][j]=g[i-1][j-1]//画图显然
i个点的森林,深度不超过j的概率
g[i][j]=sum[k=1 ->i] f[k][j]*g[i-k][j]*dp[i][k];
*/
#define int long long
n=read();
p=read();
inv[1]=1;
for(re i=2;i<=n;i++)
{
inv[i]=(p-(p/i))*inv[p%i]%p;
}
dp[1][1]=1;
for(re i=2;i<=n;i++)
{
for(re j=1;j<=i;j++)
{
dp[i][j]=(dp[i-1][j-1]%p*(j-1)%p*inv[i]+dp[i-1][j]%p*(i-j)%p*inv[i])%p;
}
}
for(re i=0;i<=n;i++)
{
g[0][i]=1;
f[1][i]=1;
}
for(re i=1;i<=n;i++)
{
for(re j=0;j<i;j++)
{
for(re k=1;k<=i;k++)
g[i][j]=(g[i][j]%p+f[k][j]%p*g[i-k][j]%p*dp[i][k]%p+p)%p;
f[i+1][j+1]=g[i][j];
for(re k=j+1;k<=n;k++)
f[i+1][k]=f[i+1][j+1];
}
for(re k=i;k<=n;k++)
g[i][k]=g[i][i-1];
}
for(re i=1;i<n;i++)
ans=(ans%p+i*(f[n][i]-f[n][i-1]+p)%p)%p;
printf("%lld\n",ans);
return 0;
}
T2 y
思路:显然是一个状压dp,我们设 \(f_{i,j,s}\)表示当前走了 i 步,终点为 j,当前状态为 S 是否可以达到,
那么\(f_{i+1,to[j],s<<1|val[k]}|=f_{i,j,s}\),因为时间和空间的限制,我们直接枚举所有点转移会 T飞,所以我们考虑枚举路径的中点,正着作一遍dp,倒着做一遍dp,同时记录每个点作为中点时的状态,最后输出即可。
注意细节:我们存储状态的时候一定要最后单独开一个for循环,不要在计算的过程中存储,否则直接T飞
AC_Code
#include<bits/stdc++.h>
#define re register int
#define lc rt<<1
#define rc rt<<1|1
#define mid ((l+r)>>1)
#define ii inline int
#define iv inline void
#define head heaaaddddd
#define next netyurywi
using namespace std;
const int N=1e4+10;
int n,m,d,tot;
long long ans=0;
int to[N<<1],next[N<<1],head[N],val[N<<1];
int f[12][95][1<<12], f2[12][95][1<<12];
vector<int> v1[95],v2[95];
bool vis[1<<22];
ii read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=0;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return (f)?x:(-x);
}
iv add(int x,int y,int z)
{
to[++tot]=y;
next[tot]=head[x];
head[x]=tot;
val[tot]=z;
}
int main()
{
n=read();
m=read();
d=read();
int a,b,c;
for(re i=1;i<=m;i++)
{
a=read();
b=read();
c=read();
add(a,b,c);
add(b,a,c);
}
int d1=(d>>1);
int d2=d-d1;
f[0][1][0]=1;
for(re i=0;i<d1;i++)
{
for(re j=1;j<=n;j++)
{
for(re k=head[j];k;k=next[k])
{
int p=to[k];
for(re s=0;s<(1<<i);s++)
{
f[i+1][p][s<<1|val[k]]|=f[i][j][s];
}
}
}
}
for(re i=1;i<=n;i++)
f2[0][i][0]=1;
for(re i=0;i<d2;i++)
{
for(re j=1;j<=n;j++)
{
for(re k=head[j];k;k=next[k])
{
int p=to[k];
for(re s=0;s<(1<<i);s++)
{
f2[i+1][p][s<<1|val[k]]|=f2[i][j][s];
}
}
}
}
for(re i=1;i<=n;i++)
{
for(re j = 0;j<(1 << d1);j++)
{
if(f[d1][i][j])
v1[i].push_back(j);
}
}
for(re i=1;i<=n;i++)
{
for(re j=0;j <(1<<d2);j++)
{
if(f2[d2][i][j])
v2[i].push_back(j);
}
}
for(re k=1;k<=n;k++)
{
for(re i=0;i<v1[k].size();i++)
{
for(re j=0;j<v2[k].size();j++)
{
if(vis[v1[k][i]<<(d2)|v2[k][j]])
continue;
vis[v1[k][i]<<(d2)|v2[k][j]]=1;
++ans;
}
}
}
printf("%lld\n",ans);
return 0;
}
T3 z
留坑
noip模拟测试20的更多相关文章
- NOIP模拟测试20「周·任·飞」
liu_runda出的题再次$\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%$ 任 题解 题目中为什么反复强调简单路径,没有环 没有环的图中点数-边数=联通块数 前缀和维护边 ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- 2019.8.14 NOIP模拟测试21 反思总结
模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组
2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色
2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)
2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...
- NOIP模拟测试17&18
NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...
- 「题解」NOIP模拟测试题解乱写I(29-31)
NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...
- 2019.7.29 NOIP模拟测试10 反思总结【T2补全】
这次意外考得不错…但是并没有太多厉害的地方,因为我只是打满了暴力[还没去推T3] 第一题折腾了一个小时,看了看时间先去写第二题了.第二题尝试了半天还是只写了三十分的暴力,然后看到第三题是期望,本能排斥 ...
随机推荐
- 在vs中调试关闭之后不关闭页面
在vs中调试api时会自动打开一个新的浏览器窗口,在关闭这个浏览器窗口时,会关闭调试.关闭调试时也会关闭浏览器窗口. 设置成调试时在已有的浏览器中打开调试页面,关闭调试也不会关掉浏览器窗口,反之亦然 ...
- DNS 解析过程
DNS 是应用层协议,用于将域名转换成 IP 地址. 1. 解析过程 DNS 的核心系统是一个三层的树状.分布式服务,基本对应域名的结构. 根域名服务器:管理顶级域名服务器,返回 com.net.cn ...
- Lc_704二分查找
package com.example.leetcode2; import java.util.*; /** * @description: 704. 二分查找 * 给定一个 n 个元素有序的(升序) ...
- AWS上创建EKS(K8S)集群
1.注意事项及准备工作 EKS分为EKS Master和EKS Node两种角色;EKS Master为全托管,EKS Node为CloudFormation创建 EKS Node若在NAT网络里,一 ...
- 20、checkconfig
chkconfig控制的原理(/etc/init.d/里面设置脚本,在/etc/rc.d/rc..d中设置软连接,通过chkconfig进行管理,同时也加入到了service服务,chkconfig设 ...
- Vue 消除Token过期时刷新页面的重复提示
1.问题现象 页面长时间未操作,再刷新页面时,第一次弹出"token失效,请重新登录!"提示,然后跳转到登录页面,接下来又弹出了n个"Token已过期"的后 ...
- __sync_fetch_and_add函数(Redis源码学习)
__sync_fetch_and_add函数(Redis源码学习) 在学习redis-3.0源码中的sds文件时,看到里面有如下的C代码,之前从未接触过,所以为了全面学习redis源码,追根溯源,学习 ...
- 国内CRM客户管理系统哪个好用
在企业管理者对CRM系统进行选择的时候,面对搜索引擎上各种各样的结果和各种广告,肯定会有这样的疑问:CRM客户管理系统到底是哪一个好?除了网络上那些为了广告效果而"夸大其词"的优点 ...
- Could not connect to 'xxx.xx.xx.xxx' (port 22): Connection failed.
刚刚使用xshell好好的,突然注销账号,准备重新连接突然连不上了. 这就很尴尬了,对我这种linux菜鸟只能去百度了,终于解决了,赶紧记录下这个坑 1.先登陆虚拟机,输入这段命令 查看ssh服务是否 ...
- WPF教程一:创建Hello world来理解XAML的内容及编译
在实际的WPF开发中遇到很多再用Winform写法来写WPF的开发人员,很多时候项目进度延期.出现非必要的BUG等等.大多是因为开发人员虽然是再写WPF. 但是没有好好的学过WPF,就导致无法发挥出W ...