Noip模拟43 2021.8.18
T1 地一体
可以树形$dp$,但考场没写出来,只打了没正确性的贪心水了$30$
然后讲题的时候B哥讲了如何正确的贪心,喜出望外的学习了一下
不难发现
每次士兵都会直接冲到叶子节点
从深的点再返回到另一个比较浅的点肯定是不优的
只有两种情况,士兵从之前的点到新的节点与直接再安排一个士兵冲到这个节点
我们就按这个策略贪心即可

1 #include<bits/stdc++.h>
2 #define int long long
3 #define pb push_back
4 #define mp make_pair
5 #define pii pair<int,int>
6 #define fi first
7 #define se second
8 using namespace std;
9 namespace AE86{
10 inline int read(){
11 int x=0,f=1;char ch=getchar();
12 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
13 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
14 }inline void write(int x,char opt='\n'){
15 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
16 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
17 for(int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
18 }using namespace AE86;
19
20 const int NN=1e5+5,inf=0x3fffffff;
21 int n,ans,pos;
22 int fa[NN],dep[NN],mdp[NN];
23 bool vis[NN];
24 vector<pii > e[NN];
25
26 inline void dfs1(int f,int x){
27 fa[x]=f; mdp[x]=dep[x];
28 for(int i=0;i<e[x].size();i++){
29 int y=e[x][i].se; if(y==f) continue;
30 dep[y]=dep[x]+1;
31 dfs1(x,y);
32 e[x][i].fi=mdp[y];
33 mdp[x]=max(mdp[x],mdp[y]);
34 }
35 }
36 inline void calc(int x){
37 if(!pos){
38 pos=x,ans+=dep[pos];
39 }else{
40 if(dep[x]<dep[x]+dep[pos]-2*dep[fa[x]]) pos=x,ans+=dep[x];
41 else ans+=dep[x]+dep[pos]-2*dep[fa[x]],pos=x;
42 }
43 }
44 inline void dfs(int f,int x){
45 if(!vis[x]) calc(x),vis[x]=1;
46 for(int i=0;i<e[x].size();i++){
47 int y=e[x][i].se; if(y==f) continue;
48 dfs(x,y);
49 }
50 }
51
52 namespace WSN{
53 inline short main(){
54 n=read();
55 for(int i=1;i<n;i++){
56 int x=read(),y=read();
57 e[x].pb(mp(0,y)); e[y].pb(mp(0,x));
58 }dfs1(0,1);//for(int i=1;i<=n;i++) cout<<dep[i]<<endl;
59 for(int i=1;i<=n;i++) sort(e[i].begin(),e[i].end());
60 dfs(0,1); write(ans);
61 return 0;
62 }
63 }
64 signed main(){return WSN::main();}
T2 滴而提
不难发现可以二分出答案
然后考虑在二分的时候如何判断,
宗旨是这样的,如果能更新得动就更新,大神叫这个(迭代最终必将收敛)
一个限制是$K$,如果没有加的次数了就不行了,就收敛就行了
另一个限制是有差值,我们考虑每一个小的$id(i,j)$都必须被填到和周围的格子一样大
这个就是更新,那么如果没有可以更新的就收敛就行

1 #include<bits/stdc++.h>
2 #define int long long
3 #define mp make_pair
4 #define pii pair<int,int>
5 #define fi first
6 #define se second
7 using namespace std;
8 namespace AE86{
9 inline int read(){
10 int x=0,f=1;char ch=getchar();
11 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
12 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
13 }inline void write(int x,char opt='\n'){
14 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
15 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
16 for(int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
17 }using namespace AE86;
18
19 const int NN=1e5+5;
20 int n,m,k,a[NN],tmp[NN];
21 inline int id(int x,int y){return m*(x-1)+y;}
22 inline bool check(int mid){
23 int K=k; bool f=1;
24 for(int i=1;i<=n*m;i++) tmp[i]=a[i];
25 while(K>=0&&f){
26 f=0;
27 for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){
28 if(i-1>=1){
29 if(tmp[id(i-1,j)]-tmp[id(i,j)]>mid){ f=1;
30 int res=tmp[id(i-1,j)]-tmp[id(i,j)];
31 tmp[id(i,j)]+=res-mid; K-=res-mid;
32 }if(K<0) return 0;
33 }
34 if(i+1<=n){
35 if(tmp[id(i+1,j)]-tmp[id(i,j)]>mid){ f=1;
36 int res=tmp[id(i+1,j)]-tmp[id(i,j)];
37 tmp[id(i,j)]+=res-mid; K-=res-mid;
38 }if(K<0) return 0;
39 }
40 if(j-1>=1){
41 if(tmp[id(i,j-1)]-tmp[id(i,j)]>mid){ f=1;
42 int res=tmp[id(i,j-1)]-tmp[id(i,j)];
43 tmp[id(i,j)]+=res-mid; K-=res-mid;
44 }if(K<0) return 0;
45 }
46 if(j+1<=m){
47 if(tmp[id(i,j+1)]-tmp[id(i,j)]>mid){ f=1;
48 int res=tmp[id(i,j+1)]-tmp[id(i,j)];
49 tmp[id(i,j)]+=res-mid; K-=res-mid;
50 }if(K<0) return 0;
51 }
52 if(i+1<=n&&j-1>=1){
53 if(tmp[id(i+1,j-1)]-tmp[id(i,j)]>mid){ f=1;
54 int res=tmp[id(i+1,j-1)]-tmp[id(i,j)];
55 tmp[id(i,j)]+=res-mid; K-=res-mid;
56 }if(K<0) return 0;
57 }
58 if(i-1>=1&&j+1<=m){
59 if(tmp[id(i-1,j+1)]-tmp[id(i,j)]>mid){ f=1;
60 int res=tmp[id(i-1,j+1)]-tmp[id(i,j)];
61 tmp[id(i,j)]+=res-mid; K-=res-mid;
62 }if(K<0) return 0;
63 }
64 }
65 }
66 return 1;
67 }
68
69 namespace WSN{
70 inline short main(){
71 n=read();m=read();k=read();int l=0,r=0,ans=l;
72 for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[id(i,j)]=read();
73 for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){
74 int dis=0,d1=0,d2=0,d3=0,d4=0,d5=0,d6=0;
75 if(i+1<=n) d1=abs(a[id(i,j)]-a[id(i+1,j)]);
76 if(i-1>=1) d2=abs(a[id(i,j)]-a[id(i-1,j)]);
77 if(j+1<=m) d3=abs(a[id(i,j)]-a[id(i,j+1)]);
78 if(j-1>=1) d4=abs(a[id(i,j)]-a[id(i,j-1)]);
79 if(i+1<=n&&j-1>=1) d5=abs(a[id(i,j)]-a[id(i+1,j-1)]);
80 if(i-1>=1&&j+1<=m) d6=abs(a[id(i,j)]-a[id(i-1,j+1)]);
81 dis=max(d1,max(d2,max(d3,max(d4,max(d5,d6)))));
82 if(r<dis) r=dis;
83 }
84 while(l<=r){
85 int mid=l+r>>1;
86 if(check(mid)) r=mid-1,ans=mid;
87 else l=mid+1;
88 }write(ans);
89 return 0;
90 }
91 }
92 signed main(){return WSN::main();}
T3 帝三踢
还没改出来,沽沽沽
T4 迪斯鶙
高爸给黄队讲昊爸的做法(集训队的辈份问题是道$NPC$。。。):
可以神仙的把 每个好的序列里面一个数$x$出现次数的平方$k^2$拆成$k^2=\binom{k}{2}*2+k$
然后试图用$dp$表示这个柿子,首先预处理出两个$dp$数组
$f_{i,j}$表示选了$i$个数,最大的值是$j$的方案数
$g_{i,j}$表示前面的一段序列最大值是$j$,后面选了$i$个数的方案数
然后我们就可以把上面的柿子变成
$(\sum_{y>=x} f_{i-1,y}*(g_{n-i,y}+2*(n-i)*g_{n-i-1,y}))+f_{i-1,x-1}*(g_{n-i,x}+2*(n-i-1)*g_{n-i-1,x})$
只能说太神了,先拍再理解了半天才彻底搞明白。。。
最后统计答案的时候处理一个前缀和数组就行

1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 namespace AE86{
5 inline int read(){
6 int x=0,f=1;char ch=getchar();
7 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
8 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
9 }inline void write(int x,char opt='\n'){
10 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
11 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
12 for(int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
13 }using namespace AE86;
14
15 const int N=3e3+5;
16 int n,p,f[N][N],g[N][N],dp[N][N],ans[N];
17
18 namespace WSN{
19 inline short main(){
20 n=read();p=read();f[0][0]=1;
21 for(int i=0;i<=n;i++) g[0][i]=1;
22 for(int i=1;i<=n;i++) for(int j=1;j<=i;j++)
23 f[i][j]=(f[i-1][j-1]+f[i-1][j]*j%p)%p;
24 for(int i=1;i<=n;i++) for(int j=1;j<=n-i;j++)
25 g[i][j]=(g[i-1][j+1]+g[i-1][j]*j%p)%p;
26 for(int i=1;i<=n;i++){
27 for(int x=n;x;x--){
28 dp[i][x]=(dp[i][x+1]+f[i-1][x]*(g[n-i][x]+2*(n-i)%p*g[n-i-1][x]%p)%p)%p;
29 (ans[x]+=dp[i][x]+f[i-1][x-1]*(g[n-i][x]+2*(n-i)%p*g[n-i-1][x]%p)%p)%=p;
30 }
31 }for(int i=1;i<=n;i++) write(ans[i],' ');
32 return 0;
33 }
34 }
35 signed main(){return WSN::main();}
Noip模拟43 2021.8.18的更多相关文章
- Noip模拟80 2021.10.18
预计得分:5 实际得分:140?????????????? T1 邻面合并 我考场上没切掉的大水题....(证明我旁边的cty切掉了,并觉得很水) 然而贪心拿了六十,离谱,成功做到上一篇博客说的有勇气 ...
- Noip模拟35 2021.8.10
考试题目变成四道了,貌似确实根本改不完... 不过给了两个小时颓废时间确实很爽(芜湖--) 但是前几天三道题改着不是很费劲的时候为什么不给放松时间, 非要在改不完题的时候颓?? 算了算了不碎碎念了.. ...
- 8.18考试总结[NOIP模拟43]
又挂了$80$ 好气哦,但要保持优雅.(草 T1 地衣体 小小的贪心:每次肯定从深度较小的点向深度较大的点转移更优. 模拟一下,把边按链接点的子树最大深度排序,发现实际上只有上一个遍历到的点是对当前考 ...
- Noip模拟70 2021.10.6
T1 暴雨 放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理 我是直接$dp$的,可能代码的复杂度比那种的稍微小一点 设$f[i][j][p][0/1]$表示考虑了前$i$列, ...
- Noip模拟76 2021.10.14
T1 洛希极限 上来一道大数据结构或者单调队列优化$dp$ 真就没分析出来正解复杂度 正解复杂度$O(q+nm)$,但是据说我的复杂度是假的 考虑一个点转移最优情况是从它上面的一个反$L$形转移过来 ...
- Noip模拟69 2021.10.5
考场拼命$yy$高精度结果没学好$for$循环痛失$50pts$,当场枯死 以后一定打对拍,要不考后会... T1 石子游戏 首先要知道典型的$NIM$博弈,就是说如果所有堆石子个数的异或和为$0$则 ...
- Noip模拟63 2021.9.27(考场惊现无限之环)
T1 电压机制 把题目转化为找那些边只被奇数环包含. 这样的话直接$dfs$生成一棵树,给每个点附上一个深度,根据其他的非树边都是返祖边 可以算出环内边的数量$dep[x]-dep[y]+1$,然后判 ...
- Noip模拟61 2021.9.25
T1 交通 考场上想了一个$NPC$.应该吧,是要求出图里面的所有可行的不重复欧拉路 无数种做法都无法解出,时间也都耗在这个上面的,于是就考的挺惨的 以后要是觉得当前思路不可做,就试着换一换思路,千万 ...
- Noip模拟59 2021.9.22
新机房首模拟变倒数 T1 柱状图 关于每一个点可以做出两条斜率分别为$1,-1$的直线, 然后题意转化为移动最少的步数使得所有点都在某一个点的两条直线上 二分出直线的高度,判断条件是尽量让这条直线上部 ...
随机推荐
- FTP协议简介
1. FTP协议概述 FTP协议的英文全称为File Transfer Protocol, 简称为FTP, 它是从一个主机向一个主机传输文件的协议. FTP协议中客户端和服务器进行文件交互的方式如下图 ...
- 批量ip段/子网转换
#coding=utf-8 import re import struct from sys import argv class CIDRHelper(object): def ipFormatChk ...
- [第五篇]——Docker 镜像加速之Spring Cloud直播商城 b2b2c电子商务技术总结
Docker 镜像加速 国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器.Docker 官方和国内很多云服务商都提供了国内加速器服务,例如: 科大镜像: 网易: 阿里云: 你 ...
- PHP方法参数的那点事儿
在所有的编程语言中,方法或者函数,都可以传递一些参数进来进行业务逻辑的处理或者计算.这没什么可说的,但是在PHP中,方法的参数还有许多非常有意思的能力,下面我们就来说说这方面的内容. 引用参数 涉及到 ...
- Orchar Core 创建一个模块化的ASP.NET Core应用程序
您将构建什么?您将构建一个模块化的ASP.NET Core MVC Web应用程序,类似于Orchard Core附带的示例"Hello World"应用程序.它包括一个Web应用 ...
- webrtc源码阅读理解一
webrtc是一个比较成熟的实时音视频处理开源项目,一上来老大就扔给我一本webrtc native实践,虽然狠下心"翻"完了一遍,但是还是云里雾里的,在经过几个月的摸索之后,我大 ...
- 华为云计算IE面试笔记-FusionSphere Openstack有哪些关键组件,各组件主要功能是什么?三种存储接入组件的差异有哪些?
1. Nova:在OpenStack环境中提供计算服务,负责计算实例(VM,云主机)生命周期的管理,包括生成.调度和回收.Nova不负责计算实例的告警上报(FC管). 2. Cinder:为计算实例提 ...
- 【原创】linux mint 17.3 kvm 安装windows7虚拟机
一.安装windows7虚拟机 linux mint 17.3是一个不错的桌面发行版本,我下载了 linux mint 17.3 for xfce 桌面版本,运行速度没得说,而且安装设置都挺简单,非常 ...
- [转载]让你玩转代码的编辑神器phpstorm功能详解
转载网址:http://wwwquan.com/show-66-121-1.html phpstorm包含了webstorm的全部功能,更能够支持php代码.PhpStorm是一个轻量级且便捷的PHP ...
- GUI编程笔记
GUI编程 告诉大家该怎么学? 这是什么? 它怎么玩? 该如何去我们平时运用? 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1.简介 GUi的核心技术:Sw ...