Noip模拟4(忁靈霁) 2021.6.6
T1 随(Rand)
由杠哥大定理可得,这题目前不可做,先跳走啦,咕咕。。。。
T2 单(single)
考场上,简单看一眼就看出是个高斯消元,然后。。。。。
板子没记住!!!
然而这不是最糟糕的。。。。
执着的我进行了对高斯消元的推演与运行,在大把时间荒废后,发现自己终于将样例中的一半答对了!!
然而,考试接近了尾声,匆匆地蒙了下其他几个题的答案就结束了。。。
然而,高斯消元推假了。。。。
就这样达成成就———爆〇!!
其实上,这题做法比较多(部分分数),然而 这题的ac代码是dfs。看了题解之后思路清晰展了,很快码完,但想想这题思维量,考上上暂时还做不到呢。。。。。
正确思路:
t=0的时候知道a数组,这时候可以求出所有点到根(1)的距离,这样可以生猛的算出b[1],
接着找(1)和他儿子们的关系,列出表达式发现以儿子(2)为根点的子树上对(2)的距离(称为贡献)都少了1,
于是,我们记录一个size数组表示以i为根节点的子树上的点权和
由于父子间的关系可以推出b[son]=b[fa]+size[1]-2*size[son];
dfs一遍就可以求出b;
t=1时,将上面柿子移项可得b[son]-b[fa]=size[1]-2*size[son];
插一句嘴,我们可以发现b[1]=size[2]+size[3]+size[4]+...+size[n]
就和之前的那个概率期望的神仙推柿子题一样,将size展开然后合并同类项发现每个点加的次数都为那个点的深度减一,及到根节点距离;
将c[i]=size[1]-2*size[i]; i!=1;
将除了c[1]的c数组加和得: tot=(n-1)size[1]-2*(size[2]+size[3]+...+size[n])
呕吼,可以化简了!! tot=(n-1)size[1]-2*b[1];
这样,原本未知的size便可以求了 size[i]=(size[1]-c[i])/2
求出size,将size倒着求a就可以知道a是啥了;
这种思维量大的题不多见,考场上还是要仔细思考,别放过任何一点新奇的想法,才有可能想对吧。。。。

1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 const int NN=1e5+5;
5 int T,n,dis[NN],a[NN],b[NN],size[NN],c[NN];
6 struct SNOW{
7 int to,next;
8 }; SNOW e[NN<<1]; int r[NN<<1],tot;
9 inline void add(int x,int y){
10 e[++tot]=(SNOW){y,r[x]};
11 r[x]=tot;
12 }
13 inline void dfs(int fa,int x){
14 for(int i=r[x];i;i=e[i].next)
15 if(e[i].to!=fa){
16 dis[e[i].to]=dis[x]+1;
17 dfs(x,e[i].to);
18 }
19 }
20 inline void dfs1(int fa,int x){
21 for(int i=r[x];i;i=e[i].next)
22 if(e[i].to!=fa){
23 dfs1(x,e[i].to);
24 size[x]+=size[e[i].to];
25 }
26 }
27 inline void dfs2(int fa,int x){
28 for(int i=r[x];i;i=e[i].next)
29 if(e[i].to!=fa){
30 b[e[i].to]=b[x]+size[1]-2*size[e[i].to];
31 dfs2(x,e[i].to);
32 }
33 }
34 inline void dfs3(int fa,int x){
35 for(int i=r[x];i;i=e[i].next)
36 if(e[i].to!=fa){
37 c[e[i].to]=a[e[i].to]-a[x];
38 dfs3(x,e[i].to);
39 }
40 }
41 inline void dfs4(int fa,int x){
42 for(int i=r[x];i;i=e[i].next)
43 if(e[i].to!=fa){
44 b[e[i].to]=size[e[i].to]=(size[1]-c[e[i].to])/2;
45 dfs4(x,e[i].to);
46 }
47 }
48 inline void dfs5(int fa,int x){
49 for(int i=r[x];i;i=e[i].next)
50 if(e[i].to!=fa){
51 dfs5(x,e[i].to);
52 b[x]-=size[e[i].to];
53 }
54 }
55 inline int read(){
56 int x=0,f=1; char ch=getchar();
57 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
58 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
59 return x*f;
60 }
61 namespace WSN{
62 inline int main(){
63 T=read();
64 while(T--){
65 memset(b,0,sizeof(b));
66 memset(c,0,sizeof(c));
67 memset(size,0,sizeof(size));
68 memset(dis,0,sizeof(dis));
69 memset(r,0,sizeof(r)); tot=0;
70 n=read();
71 for(int i=1;i<n;i++){
72 int x=read(),y=read();
73 add(x,y); add(y,x);
74 }
75 int t=read();
76 for(int i=1;i<=n;i++) a[i]=read();
77 if(!t){
78 dfs(0,1);
79 for(int i=2;i<=n;i++) b[1]+=dis[i]*a[i];
80 for(int i=1;i<=n;i++) size[i]=a[i];
81 dfs1(0,1);
82 dfs2(0,1);
83 for(int i=1;i<=n;i++) printf("%lld ",b[i]);
84 putchar('\n');
85 }
86 if(t){
87 dfs3(0,1); int cnt=0;
88 for(int i=2;i<=n;i++) cnt+=c[i];
89 size[1]=(cnt+2*a[1])/(n-1);
90 dfs4(0,1);
91 dfs5(0,1);
92 b[1]=size[1];
93 for(int i=2;i<=n;i++) b[1]-=b[i];
94 for(int i=1;i<=n;i++) printf("%lld ",b[i]);
95 putchar('\n');
96 }
97 }
98 return 0;
99 }
100 }
101 signed main(){return WSN::main();}
然而,六个dfs就很淦,感觉打完这道题对xin_team的理解又加深了不少呢
T3 题(problem)
这题就是相当于考了一个卡特兰数,然而我们这一批人还没学。。。
怎么办呢?那就学呗
t=0,枚举向横向移动步数,必须是偶数,则纵向步数n-i。
从中选1/2向正方向走,另一半反向走C(n,i)C(i,i/2)C((n-i),(n-i)/2)
t=1,卡特兰数公式走起即可catalan(n)=C(2n,n)/(n+1),至于有一个奇怪的错误就是另一个表达式他用了会错,不明白为什么
t=2,使用dp,注意是四个方向
f[0]=1;
for(int i=0;i<=n;i+=2){
for(int j=0;j<=i;j+=2){
f[i]=(f[i]+f[i-j]*4%p*catlan(j/2-1)%p)%p;
}
t=3,数据累加加卡特兰数,思路较简单(当时重点不知道卡特兰数是啥,汗)

1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 const int p=1e9+7;
5 int hi[3000000],n,typ;
6 inline int jie(int x){
7 if(x==1||x==0) return 1;
8 if(hi[x]) return hi[x];
9 return hi[x]=((jie(x-1)%p)*(x%p))%p;
10 }
11 inline int fima(int a){
12 int ans=1,b=p-2; a=a%p;
13 while(b){
14 if(b&1) ans=(ans*a)%p;
15 b>>=1,a=(a*a)%p;
16 } return ans;
17 }
18 inline int C(int n,int m){
19 if(n==m) return 1;
20 return jie(n)*fima(jie(m)*jie(n-m)%p)%p;
21 }
22 inline int catlan(int n){
23 return C(2*n,n)*fima(n+1)%p;
24 }
25 inline int read(){
26 int x=0,f=1; char ch=getchar();
27 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
28 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
29 return x*f;
30 }
31 namespace WSN{
32 inline int main(){
33 n=read(),typ=read();
34 if(typ==1) printf("%lld\n",catlan(n/2));
35 if(typ==0){
36 int ans=0;
37 for(int i=0;i<=n;i++)
38 if(!(i&1)) ans=(ans+C(n,i)*C(i,i/2)%p*C((n-i),(n-i)/2)%p)%p;
39 printf("%lld\n",ans);
40 }
41 if(typ==3){
42 int ans=0;
43 for(int i=0;i<=n;i++)
44 if(!(i&1)) ans=(ans+C(n,i)*catlan(i/2)%p*catlan((n-i)/2)%p)%p;
45 printf("%lld\n",ans);
46 }
47 if(typ==2){
48 int f[1005]={};
49 f[0]=1;
50 for(int i=0;i<=n;i+=2){
51 for(int j=0;j<=i;j+=2){
52 f[i]=(f[i]+f[i-j]*4%p*catlan(j/2-1)%p)%p;
53 }
54 }
55 printf("%lld\n",f[n]);
56 }
57 return 0;
58 }
59 }
60 signed main(){return WSN::main();}
马の思
考完试挺不爽的,居然(——————),看这次考试经历发现还是不能死干一道题的,风险太大了
而且T4的得分率较高,虽然是黑的,但事后想一想,六维xin队是真的好冲
保底分拿到不是问题,可到考试结束我连第四题还没看,真是。。。。
总结下经验,考试打暴力,板子要记牢。。。。
END
Noip模拟4(忁靈霁) 2021.6.6的更多相关文章
- 2021.9.17考试总结[NOIP模拟55]
有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...
- noip模拟33
\(\color{white}{\mathbb{失足而坠千里,翻覆而没百足,名之以:深渊}}\) 这场考试的时间分配非常不科学 开题试图想 \(t1\) 正解,一个半小时后还是只有暴力,特别惊慌失措 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
随机推荐
- Spring全自动AOP和项目加入jar包
一.jar可以引进项目中,复制到路下后,要add as library,加载到工作空间中才能引入: 也jar包放在硬盘的项目目录外面,可以多个项目引入共用: 二.xml配置 1.aop全自动配置 2. ...
- .Net性能调优-MemoryPool
简单用法 //获取MemoryPool实例,实际返回了一个ArrayMemoryPool<T> MemoryPool<char> Pool = MemoryPool<ch ...
- 企业快速开发平台Spring Cloud+Spring Boot+Mybatis+ElementUI 实现前后端分离
鸿鹄云架构一系统管理平台 鸿鹄云架构[系统管理平台]使用J2EE技术来实施,是一个大型分布式的面向服务的JavaEE体系快速研发平台,基于模块化.服务化.原子化.热部署的设计思想,使用成熟领先的无商业 ...
- 论文解读(DGI)《DEEP GRAPH INFOMAX》
论文标题:DEEP GRAPH INFOMAX 论文方向:图像领域 论文来源:2019 ICLR 论文链接:https://arxiv.org/abs/1809.10341 论文代码:https:// ...
- 【OI】Tex Quotes——UVa 272
题目: TEX is a typesetting language developed by Donald Knuth. It takes source text together with a fe ...
- java线程day-02
1.什么是线程 * 线程是程序执行的一条路径, 一个进程中可以包含多条线程 * 多线程并发执行可以提高程序的效率, 可以同时完成多项工作 2.多线程的应用场景 * 红蜘蛛同时共享屏幕给多个电脑 * 迅 ...
- PHP的LZF压缩扩展工具
这次为大家带来的是另外一个 PHP 的压缩扩展,当然也是非常冷门的一种压缩格式,所以使用的人会比较少,而且在 PHP 中提供的相关的函数也只是对字符串的编码与解码,并没有针对文件的操作.因此,就像 B ...
- 常用的excel技巧
隐藏 冻结 设置下拉选项 复制.移动sheet 自动求和
- 鸿蒙内核源码分析(CPU篇) | 整个内核就是一个死循环 | 祝新的一年牛气冲天 ! | v32.02
百篇博客系列篇.本篇为: v32.xx 鸿蒙内核源码分析(CPU篇) | 整个内核就是一个死循环 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...
- Appium+Python自动化环境搭建-1
前言 appium可以说是做app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本语言也是支持java和Python. 小编擅长Python,所以接下来的教程是appium+p ...