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] 第一题折腾了一个小时,看了看时间先去写第二题了.第二题尝试了半天还是只写了三十分的暴力,然后看到第三题是期望,本能排斥 ...
随机推荐
- Jenkins 进阶篇 - 节点配置
当我们使用 Jenkins 构建的项目达到一定规模后,一个 Jenkins 服务可能承受不了负载,会导致很多的构建任务堆积,严重的话还会拖垮这台服务器,导致上面的服务无法使用.例如我们公司目前在 Je ...
- Android集合中对象排序
如果将集合中的对象进行排序,最近使用了一个简单的方法解决了,随笔记下来. 主要思路: 首先,新建类实现Comparator<?>,这个类是做比较的关键类,一般做比较的类型 int 或 St ...
- Java安全之基于Tomcat实现内存马
Java安全之基于Tomcat实现内存马 0x00 前言 在近年来红队行动中,基本上除了非必要情况,一般会选择打入内存马,然后再去连接.而落地Jsp文件也任意被设备给检测到,从而得到攻击路径,删除we ...
- SpringCloud入门及创建分布式项目
1.了解微服务 1.1 什么是微服务 微服务是一种架构风格 一个应用拆分为一组小型服务 每个服务运行在自己的进程内,也就是可独立部署和升级 服务之间使用轻量级HTTP交互 服务围绕业务功能拆分 可以由 ...
- CentOS安装ffmpeg+h264
CentOS安装ffmpeg+h264 前言 坑!坑!坑! 全是坑. 本文安装系统环境为CentOS7.2.我这里提供安装所需的四个源码包,均需要编译安装.所有组件最好都安装最新的稳定版,或者下载使用 ...
- 仅使用JsonUtility && File类实现Json数据读写
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using S ...
- vue 快速入门 系列 —— vue loader 下
其他章节请看: vue 快速入门 系列 vue loader 下 CSS Modules CSS Modules 是一个流行的,用于模块化和组合 CSS 的系统.vue-loader 提供了与 CSS ...
- Vue3全家桶升级指南二ref、toRef、toRefs的区别
ref是对原始数据的拷贝,当修改ref数据时,模板中的视图会发生改变,但是原始数据并不会改变. toRef是对原始数据的引用,修改toRef数据时,原始数据也会发生改变,但是视图并不会更新. 在vue ...
- Java:java -jar命令讲解
1. 当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 #正常启动jar包 java -jar XXX.jar#当前ssh窗口被锁定,可按CTRL + C打断程序运行, ...
- SpringMVC(8)国际化
在SpringMVC(七)格式化显示中我们讲了数据的格式化显示,Spring在做格式化展示的时候已经做了国际化处理,那么如何将我们网站的其它内容(如菜单.标题等)做国际化处理呢?这就是本篇要将的内容- ...