【比赛】高一小学期2

挺唐的比赛,一道数位 dp 原题一道平衡树,然后 T1 数据范围还整错了。。

没图了呜呜

【比赛】高一小学期2

$Rank$
赛时

image

日前赛后

image
image


T1 同类分布

思路

印象里为数不多搞懂了的数位 dp,但过太久忘了,只能赛时打暴力

后来发现跟正解很接近了,只是在 dfs 前的预处理上出了点问题。

用记搜做,记搜前循环遍历所有可能的数字和 \(s\) 作为模数,\(len\) 为当前搜到的位数,\(sum\) 为当前所有数字和,\(logos\) 存当前数对 \(s\) 取模的结果,\(lmt\) 判断当前是否达到上限。

由于每次模数 \(s\) 不同,所以 dp 数组需要每轮清空,多次用到 memset,所以数组大小要开适量。

Code:

#include<bits/stdc++.h>
#define fo(x,y,z) for(int (x)=(y);(x)<=(z);(x)++)
#define fu(x,y,z) for(int (x)=(y);(x)>=(z);(x)--)
using namespace std;
typedef long long ll;
#define lx ll
inline lx qr()
{char ch=getchar();lx x=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);return x*f;
}
#undef lx
#define qr qr()
const int Ratio=0;
ll a,b,cnt,s;
ll num[20],f[20][163][163];
// 最多19位数,sum 最大值为 1+18*9=162
namespace Wisadel
{inline ll Wdfs(int len,int sum,int logos,int lmt){if(sum+9*len<s) return 0;// 小剪枝 if(!lmt&&f[len][sum][logos]!=-1) return f[len][sum][logos];// 记录过 if(!len) return logos==0&&sum==s;// 搜到末尾 ll res=0,maxx=lmt?num[len]:9;fo(i,0,maxx)res+=Wdfs(len-1,(sum+i),(logos*10+i)%s,lmt&&i==maxx);if(!lmt) f[len][sum][logos]=res;// 记忆 return res;}inline ll Ws(ll x){cnt=0;ll ans=0;while(x) num[++cnt]=x%10,x/=10;for(s=1;s<=cnt*9;s++){memset(f,-1,sizeof f);ans+=Wdfs(cnt,0,0,1);}return ans;}short main(){freopen("a.in","r",stdin),freopen("a.out","w",stdout);a=qr,b=qr;printf("%lld\n",Ws(b)-Ws(a-1));return Ratio;}
}
int main(){return Wisadel::main();}

T2 千山鸟飞绝

思路

首先(才不是只会)考虑暴力的思路,开一个结构体存每只鸟的有关信息,用 map 将坐标离散成点,\(num_i\) 存每个点实时鸟数量,\(pre_{i,j}\) 表示 \(i\) 点第 \(j\) 只鸟的下标。

注意到有鸟会飞走,静态数组不能很好地进行删除替换,所以我们令飞走的第 \(j\) 只鸟下标为 \(-1\),然后还要一个 \(ttot_i\) 记录 \(i\) 点一共来过多少只鸟。

写一个 pushup 操作,每当鸟变化后 \(num_i>1\) 时运行,更新该点每个鸟的信息。

暴力本来期望的分 \(50pts\),但我只拿了 \(40pts\),怎么绘世呢?

考虑鸟的数量最多为 \(30000\),为了防止 MLE,我只把 \(pre\) 数组开到了 \(30000\times 150\),然而那个测试点中显然有个点来了超过 \(150\) 只鸟,然后就 GG 了。

暴力 $50pts's\,code$:
#include<bits/stdc++.h>
#define fo(x,y,z) for(int (x)=(y);(x)<=(z);(x)++)
#define fu(x,y,z) for(int (x)=(y);(x)>=(z);(x)--)
using namespace std;
typedef long long ll;
#define lx int
inline lx qr()
{char ch=getchar();lx x=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);return x*f;
}
#undef lx
#define qr qr()
const int Ratio=0;
const int N=30005;
int n,t,tot;
struct rmm
{int id,xx,yy,ww,zb;int sq=0,tj=0;
}bd[N];
map<pair<int,int>,int>mp;
int num[N*2],pre[N*2][308],ttot[N*4];
namespace Wisadel
{void Wpushup(int zbb){fo(i,1,ttot[zbb]){if(pre[zbb][i]==-1) continue;int maxsq=-2147483647,k=pre[zbb][i];bd[k].tj=max(bd[k].tj,num[zbb]-1);fo(j,1,ttot[zbb]){if(i==j) continue;int kk=pre[zbb][j];maxsq=max(maxsq,bd[kk].ww);}bd[k].sq=max(bd[k].sq,maxsq);}}void Wfin(int v){fo(i,1,ttot[bd[v].zb])if(pre[bd[v].zb][i]==v){pre[bd[v].zb][i]=-1;break;}num[bd[v].zb]--;}short main(){freopen("a.in","r",stdin),freopen("a.out","w",stdout);n=qr;fo(i,1,n){bd[i].id=i,bd[i].ww=qr,bd[i].xx=qr,bd[i].yy=qr;if(!mp[{bd[i].xx,bd[i].yy}]) mp[{bd[i].xx,bd[i].yy}]=++tot;bd[i].zb=mp[{bd[i].xx,bd[i].yy}];num[bd[i].zb]++,ttot[bd[i].zb]++,pre[bd[i].zb][ttot[bd[i].zb]]=i;if(num[bd[i].zb]>1) Wpushup(bd[i].zb);}t=qr;while(t--){int a=qr,b=qr,c=qr;int i=a;Wfin(a);if(!mp[{b,c}]) mp[{b,c}]=++tot;bd[i].xx=b,bd[i].yy=c;bd[i].zb=mp[{b,c}];num[bd[i].zb]++,ttot[bd[i].zb]++,pre[bd[i].zb][ttot[bd[i].zb]]=i;if(num[bd[i].zb]>1) Wpushup(bd[i].zb);}fo(i,1,n) printf("%lld\n",1ll*bd[i].sq*bd[i].tj);return Ratio;}
}
int main(){return Wisadel::main();}

然后考虑平衡树做法。打出暴力能加深对题目的理解(确信),现在我们知道可以用 Splay 维护每个点的有关信息,每秒进行以下操作:

  • 将该鸟从原树中删除;
  • 将该鸟的武力值更新到前往的树中,用标记记录树上士气值和团结值;
  • 将该树中的士气值更新给该鸟;
  • 将该鸟插入前往的树对应的 Splay 中。

之后下放标记,输出答案即可。

Code:

#include<bits/stdc++.h>
#define fo(x,y,z) for(int (x)=(y);(x)<=(z);(x)++)
#define fu(x,y,z) for(int (x)=(y);(x)>=(z);(x)--)
using namespace std;
typedef long long ll;
#define lx int
inline lx qr()
{char ch=getchar();lx x=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);return x*f;
}
#undef lx
#define qr qr()
const int Ratio=0;
const int N=100005;
int n,t,tot;
pair<int,int>zb[N];
int rt[N<<2],fa[N],son[N][2],siz[N];
int maxv[N],v[N],sq[N],tj[N];
int sqbj[N],tjbj[N];
map<pair<int,int>,int>mp;
namespace Wisadel
{#define ls(x) son[x][0]#define rs(x) son[x][1]void Wcler(int x){fa[x]=ls(x)=rs(x)=0;siz[x]=1;maxv[x]=v[x];sqbj[x]=tjbj[x]=0; }void Wpushup(int x){siz[x]=siz[ls(x)]+siz[rs(x)]+1;maxv[x]=max(v[x],max(maxv[ls(x)],maxv[rs(x)]));}void Wmark(int x,int a,int b){sqbj[x]=max(sqbj[x],a),sq[x]=max(sq[x],sqbj[x]);tjbj[x]=max(tjbj[x],b),tj[x]=max(tj[x],tjbj[x]);}void Wpushdown(int x){if(sqbj[x]) Wmark(ls(x),sqbj[x],0),Wmark(rs(x),sqbj[x],0),sqbj[x]=0;if(tjbj[x]) Wmark(ls(x),0,tjbj[x]),Wmark(rs(x),0,tjbj[x]),tjbj[x]=0;}void Wrotate(int x){int y=fa[x],z=fa[y],fla=rs(y)==x;fa[x]=z;if(z) son[z][rs(z)==y]=x;son[y][fla]=son[x][!fla],fa[son[y][fla]]=y;son[x][!fla]=y,fa[son[x][!fla]]=x;Wpushup(y),Wpushup(x);}void Wpdrt(int x){if(fa[x]) Wpdrt(fa[x]);Wpushdown(x);}void Wsplay(int x){Wpdrt(x);for(int y=fa[x];y;Wrotate(x),y=fa[x])if(fa[y])((rs(y)==x)^(rs(fa[y])==y))?Wrotate(x):Wrotate(y);rt[mp[zb[x]]]=x;}void Wins(pair<int,int> c,int x){zb[x]=c;if(!mp[c]){mp[c]=++tot,rt[mp[c]]=x;return;}int y=rt[mp[c]];sq[x]=max(sq[x],maxv[y]);tj[x]=max(tj[x],siz[y]);Wmark(y,v[x],siz[y]);ls(x)=y,fa[ls(x)]=x;rt[mp[c]]=x;Wpushup(x);}void Wdel(int x){pair<int,int> c=zb[x];Wsplay(x);if(!ls(x)){rt[mp[c]]=rs(x),fa[rt[mp[c]]]=0;return;}int y=ls(x);while(rs(y)) y=rs(y);Wsplay(y);rs(y)=rs(x),fa[rs(y)]=y;Wpushup(y);}void Wpdall(int x){if(!x) return;Wpushdown(x);Wpdall(ls(x)),Wpdall(rs(x));}short main(){freopen("a.in","r",stdin),freopen("a.out","w",stdout);n=qr;fo(i,1,n){siz[i]=1;maxv[i]=v[i]=qr;int a=qr,b=qr;Wins({a,b},i);}t=qr;while(t--){int a=qr,b=qr,c=qr;Wdel(a),Wcler(a);Wins({b,c},a);}fo(i,1,tot) Wpdall(rt[i]);fo(i,1,n) printf("%lld\n",1ll*sq[i]*tj[i]);return Ratio;}
}
int main(){return Wisadel::main();}

完结撒花~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/740465.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

针对于早期版本的flutter开发的app的处理

下为某个flutter开发的app的hook app为flutter开发,知道是一个AES加密,但是相关so中方法的hook经验较少 这个app的dart的版本较早,是2.10的,找了一个开源的脚本,对代码进行了处理,获取到相对的so层的方法和地址 脚本地址:https://github.com/rscloura/Doldrums 目前较好…

(10)逻辑综合添加约束(环境约束)

一、环境约束此外,还有电路内互连线的延时也没有考虑在内四个环境约束:1.输出负载如果电路的输出负载过大,将会加大电路的transition time,从而影响电路时序此外,若dc默认输出负载为0,即相当于不接负载,这样综合出来的电路时序显然过于乐观,不能反映实际工作情况可以设…

[GIT] 解决:git status时有Untracked files(未跟踪的文件)

1 问题描述git pull时失败,报Please move or remove them before you merge。结果git status显示有一堆不太想提交的Untracked files(未跟踪的文件)。那么,Untracked files文件状态的文件,是什么?一般又如何处理呢?2 原因分析我们要真正弄明白问题的原因,我们就要先知道文…

windows版Oracle11g安装记录

一、下载Oracle 11g数据库安装包 已上传至博客园文件中 二、安装Oracle 11g 下载下来是下图这样的两个压缩包:1、解压这两个压缩包到同一个文件夹(切记路径文件不可有中文、空格和不规则字符。): 2、将解压好的win64_11gR2_database_2of2\database\stage\Components下的所有…

使用UFUNCTION(BlueprintCallable)修饰了函数,但是在蓝图中找不到怎么办?

在蓝图图表中,任意空位右键,去掉“情境勾选”就好了。

thinkphp6 使用Workerman测试

1.首先通过 composer 安装 think-worker、think-viewcomposer require topthink/think-worker composer require topthink/think-view安装成功后在项目的config目录会新增3个配置文件 2.修改woker.php中监听的端口return [// 扩展自身需要的配置host => 12…

C++ Boost 字符串处理库

Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开发过程…

LLM推理引擎怎么选?TensorRT vs vLLM vs LMDeploy vs MLC-LLM

LLM擅长文本生成应用程序,如聊天和代码完成模型,能够高度理解和流畅。但是它们的大尺寸也给推理带来了挑战。有很多个框架和包可以优化LLM推理和服务,所以在本文中我将整理一些常用的推理引擎并进行比较。 https://avoid.overfit.cn/post/33f6420c91e74c0eb8d6737cb9471e27…

WPF ComboBox数据绑定:初始化动态加载ItemsSource后首次赋值Text不显示问题解决

原来:<ComboBox Text="{Binding Item}" ItemsSource="{Binding ItemLists}"></ComboBox>private void Paras_Init(){ItemLists = new ObservableCollection<string>();ItemLists.Add("11111");ItemLists.Add("22222&qu…

多边形填充-活动边表法

参考文档: 参考1:https://blog.csdn.net/u013044116/article/details/49737585 参考2:https://blog.csdn.net/keneyr/article/details/83747501 算法思想: 对多边形沿y轴从0开始遍历,建立边表NET。只记录顶点的x, dx, ymax。 根据NET构建活动边表AET(activate edge table)…

WebOffice在线编微软Offfice,并以二进制流的形式打开Word文档

在日常办公场景中,我们经常会遇到这种场景:我们的合同管理系统的各种Word,excel,ppt数据都是以二进制数组的形式存储在数据库中,如何从数据库中读取二进制数据,以二进制数据作为参数,然后加载到浏览器的Office窗口,实现在线编辑Office的功能呢? 猿大师办公助手是猿大师旗…

香橙派编译linux内核支持ebpf和虚拟WIFI

前言 上一篇文章香橙派5plus上跑云手机方案一 redroid(带硬件加速)中说了怎么运行redroid,这篇补一下怎么修改参数编译内核。 补充 上篇文章有个内容需要补充一下:更新完内核需要用下面的命令防止内核被apt更新,不然后面使用apt update又回到官方的内核(注意版本号,当前是1…