20231103 比赛总结

比赛经过

日常 20 m i n 20min 20min 后开考
稍微想了一下 T 1 T1 T1,手玩了几个数据 + 样例的树形结构发现和 l o w b i t lowbit lowbit 关系较大,遂往这个方向考虑,大概回了,写了很久,中间有些细节不确定调了很久,大概 1 h 1h 1h 过了
T 2 T2 T2 一眼感觉第二种法术在最下面的根号左右层才有用,算了一下发现是 6 n \sqrt {6n} 6n ,有 800 800 800 左右, n f l s nfls nfls 机子很慢,在乘上一些常数感觉有点过不去
去和其他人讨论了一下发现没有更好的解法, 遂冲了一发,很快过了大样例,测了一波极限数据 0.3 s 0.3s 0.3s,怎么跑这么快!!!这时大概是 2 h 2h 2h
T 3 T3 T3 题目很长,花了一会才懂,是个缝合怪题,第二部分很快会了 q l o g n qlogn qlogn 做法,但第一个问题 n*m的网格中有k个矩形,对每一行求出有多少个矩形被覆盖了<lim次(lim<=10) 一直只有 O ( n n ) O(n\sqrt n) O(nn ) 的想法,差不多 2 h 50 m i n 2h50min 2h50min 左右,还没想出来,于是开始写,到 3 h 20 m i n 3h20min 3h20min 左右调完,过了大样例 1 − 5 1-5 15,大概能拿 65 p t s 65pts 65pts
想摆,看了一眼部分分, l i m = 1 lim=1 lim=1,那不直接线段树维护最小值吗,诶,我好像会了,直接线段树维护前 l i m lim lim 个最小值及出现次数不就可以了吗,还有 50 m i n 50min 50min,于是开始冲,在还剩 20 m i n 20min 20min 时过了所有样例,但最大样例有点慢,卡了卡常,放在 n f l s nfls nfls 上测了一下,很快,遂摆
预估分数: 100 + 100 + 100 + 5 = 305 100+100+100+5=305 100+100+100+5=305
实际分数: 100 + 100 + 100 + 5 = 305 100+100+100+5=305 100+100+100+5=305

反思

T 2 T2 T2 想到根号做法却因为常数问题浪费了 30 m i n 30min 30min 没冲是一个错误
感觉自己一些普通问题上的思考也不够,感觉线段树维护 l i m lim lim 小值很板

题解

A

没什么好说的,直接组合数算一下

#include <bits/stdc++.h>
using namespace std;
const int N=10000100,K=1000100,P=998244353;
int n,q,fac[N],inv[N],v[K];
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
int binom(int a,int b){if(a<0||b<0||a<b) return 0;return 1ll*fac[a]*inv[b]%P*inv[a-b]%P;
}
int qmi(int a,int b){int res=1;for(;b;b>>=1){if(b&1) res=1ll*res*a%P;a=1ll*a*a%P;}return res;
}
inline void inc(int &x,int y){ x+=y;if(x>=P) x-=P;}
int main(){freopen("tree.in","r",stdin);freopen("tree.out","w",stdout);fac[0]=1;for(int i=1;i<N;i++) fac[i]=1ll*fac[i-1]*i%P;inv[N-1]=qmi(fac[N-1],P-2);for(int i=N-2;i>=0;i--) inv[i]=1ll*inv[i+1]*(i+1)%P;n=read(),q=read();while(q--){int k=read();for(int i=1;i<=k;i++) v[i]=read();v[++k]=n;int d=read(),ans=0;for(int i=1;i<=k;i++){int curd=d-(i-1);if(i>1) inc(ans,binom(v[i],curd)),inc(ans,P-binom(v[i-1],curd-1));else inc(ans,binom(v[i],curd));}printf("%d\n",ans);}fprintf(stderr,"%d ms\n",int(1e3*clock()/CLOCKS_PER_SEC));return 0;
}

T2

观察到第二种法术只有在后 6 n \sqrt{6n} 6n 层才会施展,于是直接暴力 d p dp dp 即可,状态是 f i , j f_{i,j} fi,j 表示到第 i i i 列,施展第二种法术的位置的 m a x x + y = j max{x+y}=j maxx+y=j 的最小代价

#include <bits/stdc++.h>
#define x first
#define y second
#define pb push_back
using namespace std;
const int N=100100,B=800,inf=1e9;
typedef pair<int,int> pii;
int n,k,sum[B+100],ans[B+100];
pii p[N];
vector<int> vec[N];
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
int main(){freopen("tower.in","r",stdin);freopen("tower.out","w",stdout);n=read(),k=read();for(int i=1;i<=k;i++) p[i].x=n-read()+1,p[i].y=read();sort(p+1,p+k+1);int tot=0;for(int i=1;i<=k;i++){if(p[i].x>B) tot+=3;else vec[p[i].y].pb(p[i].x);}memset(ans,0x3f,sizeof(ans));ans[0]=0;for(int i=1;i<=n;i++){int y=n-i+1,lim=min(B,y);for(int x:vec[i]) sum[x]++;sum[lim+1]=0;for(int j=lim;j;j--) sum[j]+=sum[j+1];int mn=inf;for(int j=0;j<=lim;j++){int t=ans[j];ans[j]=min(ans[j],j*(j+1)/2+2+mn)+3*sum[j+1];mn=min(mn,t);}int t=ans[0];for(int j=0;j<=lim;j++) ans[j]=ans[j+1];ans[0]=min(ans[0],t),ans[lim]=inf;for(int j=0;j<=lim;j++) sum[j]=0;}printf("%d\n",ans[0]+tot);fprintf(stderr,"%d ms\n",int(1e3*clock()/CLOCKS_PER_SEC));return 0;
}

C

首先第二问是好处理的,直接按照 m i n min min 男女的数量排序,处理一下前缀和即可
考虑第一问也就扫描线,然后用线段树维护前 l i m lim lim 小值和其出现次数即可
时间复杂度 O ( n k l o g n + q l o g n ) O(nklogn+qlogn) O(nklogn+qlogn)

#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
typedef long long LL;
const int N=300100;
struct RANGE{ int l,r,neg;};
int n,m,c,lim,q,v[N];
LL sum1[N],sum2[N];
vector<RANGE> range[N];
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
struct Node{ int mn[10],times[10];}seg[N<<2];
int tag[N<<2];
void down(int x,int tg){ for(int i=0;i<lim;i++) seg[x].mn[i]+=tg;tag[x]+=tg;}
void build(int l,int r,int x){seg[x].mn[0]=0,seg[x].times[0]=r-l+1;for(int i=1;i<lim;i++) seg[x].mn[i]=1e9,seg[x].times[i]=0;if(l==r) return;int mid=(l+r)>>1;build(l,mid,x<<1),build(mid+1,r,x<<1^1);
}
void pushdown(int x){if(tag[x]) down(x<<1,tag[x]),down(x<<1^1,tag[x]),tag[x]=0;
}
void pushup(Node &ret,Node lc,Node rc){for(int i=0,j=0,k=0;i<lim;i++){if(lc.mn[j]==rc.mn[k]) ret.mn[i]=lc.mn[j],ret.times[i]=lc.times[j]+rc.times[k],j++,k++;else if(lc.mn[j]<rc.mn[k]) ret.mn[i]=lc.mn[j],ret.times[i]=lc.times[j],j++;else ret.mn[i]=rc.mn[k],ret.times[i]=rc.times[k],k++;}
}
void modify(int l,int r,int x,int L,int R,int v){if(L<=l&&r<=R){ down(x,v);return;}pushdown(x);int mid=(l+r)>>1;if(mid>=L) modify(l,mid,x<<1,L,R,v);if(mid<R) modify(mid+1,r,x<<1^1,L,R,v);pushup(seg[x],seg[x<<1],seg[x<<1^1]);
}
int main(){freopen("army.in","r",stdin);freopen("army.out","w",stdout);n=read(),m=read(),c=read(),lim=read(),q=read();for(int i=1;i<=c;i++){int x1=read(),y1=read(),x2=read(),y2=read();range[x1].pb({y1,y2,1}),range[x2+1].pb({y1,y2,-1});}build(1,m,1);for(int i=1;i<=n;i++){for(auto ran:range[i]) modify(1,m,1,ran.l,ran.r,ran.neg);auto fin=seg[1];int res=0;for(int j=0;j<lim&&fin.mn[j]<lim;j++) res+=fin.times[j];v[i]=min(res,m-res);}sort(v+1,v+n+1);for(int i=1;i<=n;i++) sum1[i]=sum1[i-1]+v[i],sum2[i]=sum2[i-1]+1ll*v[i]*v[i];while(q--){int x=read(),y=read();LL ans=0;int pos=lower_bound(v+1,v+n+1,y/2)-v;if(n-pos+1>=x) ans=1ll*x*(y/2)*(y-y/2);else ans=1ll*(n-pos+1)*(y/2)*(y-y/2)+1ll*y*(sum1[pos-1]-sum1[n-x])-(sum2[pos-1]-sum2[n-x]);printf("%lld\n",ans);}fprintf(stderr,"%d ms\n",int(1e3*clock()/CLOCKS_PER_SEC));return 0;
}

D

没补,不会

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

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

相关文章

LeetCode----76. 最小覆盖子串

 题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果 s 中存在这样的子串,我们保…

理解训练深度前馈神经网络的难度【PMLR 2010】

论文地址&#xff1a;Excellent-Paper-For-Daily-Reading/summarize at main 类别&#xff1a;综述 时间&#xff1a;2023/11/03 摘要 这篇论文比较久了&#xff0c;但仍能从里面获得一些收获&#xff0c;论文主要是讨论并研究了不同的非线性激活函数的影响&#xff0c;sig…

不一样的编程方式 —— 协程(设计原理与汇编实现)

主要通过以下9个方面来了解协程的原理&#xff1a; 目录 1、为什么使用协程 1.3、协程的适用场景 2、协程的原语操作 3、协程的切换 3.1、汇编实现 4.协程的运行流程 5.协程的结构体定义(我们其实可以参照线程或者进程的状态来设计) 5.1、多状态集合设计 6.协程的调度…

UE5.0.3版本 像素流送 Pixel Streaming

目录 0 引言1 准备工作1.1 下载Node.js1.2 下载 PixelStreaming&#xff08;非必须&#xff09; 2 快速入门2.1 打包工程2.2 启动信令服务器2.3 启动工程2.4 打开网页 3 总结 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;UE虚幻引擎专栏&#x…

LuatOS-SOC接口文档(air780E)--nbiot - NB-IOT操作库

nbiot.isReady()# 网络是否就绪 参数 无 返回值 返回值类型 解释 boolean 已联网返回true,否则返回false 例子 -- 判断是否已经联网 if nbiot.isReady() then log.info("nbiot", "net is ready") endnbiot.imsi() 读取IMSI 参数 无 返回值 …

如何使用手机提高拍照水平

使用手机提高拍照水平的一些技巧包括&#xff1a; 1.熟悉相机应用&#xff1a;了解相机应用的各种设置和功能&#xff0c;包括曝光、对焦、白平衡等&#xff0c;可以更好地控制拍照效果。 2.照明&#xff1a;注意光线的条件&#xff0c;尽量选择光线明亮、柔和的环境。避免背…

MySQL表的增删改查(基础)

文章目录 一、CRUD二、新增&#xff08;Create&#xff09;2.1 单行数据全列插入2.2多行数据指定列插入 三、查询3.1 全列查询3.2 指定列查询3.3 查询字段表达式3.4 别名3.5 去重 DISTINCT3.6 排序3.7 条件查询 WHERE3.8 分页查询 LIMIT 四、修改&#xff08;Update&#xff09…

防火墙日志记录和分析

防火墙监控进出网络的流量&#xff0c;并保护部署防火墙的网络免受恶意流量的侵害。它是一个网络安全系统&#xff0c;它根据一些预定义的规则监控传入和传出的流量&#xff0c;它以日志的形式记录有关如何管理流量的信息&#xff0c;日志数据包含流量的源和目标 IP 地址、端口…

【广州华锐互动】VR特警作战模拟演练系统

在科技发展的驱动下&#xff0c;各行各业都在寻找新的方式来提升效率和培训质量。其中&#xff0c;虚拟现实&#xff08;VR&#xff09;技术在各个领域都有广泛的应用&#xff0c;包括警察培训。VR特警作战模拟演练系统由VR公司广州华锐互动开发&#xff0c;它使用虚拟现实环境…

pb:导入EXCEL,提示“不能连接EXCEL”

pb:导入EXCEL,提示“不能连接EXCEL” ------------------------------------------------------------------------------------------------------------------------------- 1.pb连上EXCEL代码: //从EXCEL读取文件 STRING LS_PATH,LS_FILE,ls_file_tmp oleobject ole_1…

yolox转rknn

使用瑞芯微版本的yolox&#xff1a;https://github.com/airockchip/YOLOXpip install torch1.8.1 torchvision0.9.1 torchaudio0.8.1 --no-cache -i https://pypi.tuna.tsinghua.edu.cn/simplepip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --…

CHS零壹视频恢复程序高级版视频修复OCR使用方法

目前CHS零壹视频恢复程序监控版、专业版、高级版已经支持了OCR&#xff0c;OCR是一种光学识别系统&#xff0c;高级版最新版本中不仅仅是在视频恢复中支持OCR&#xff0c;同时视频修复模块也增加了OCR功能&#xff0c;此功能可以针对一些批量修复的视频文件&#xff08;如执法仪…

预防HPV?谭巍主任分享提高抵抗力的五种水果

在快节奏的现代生活中&#xff0c;我们常常会因为工作、学习或者其他原因而忽视了自己的健康。身体抵抗力是人体抵御外部环境压力和疾病入侵的重要防线。这个防线需要我们通过营养的补充和适当的锻炼来维护。在这篇文章中&#xff0c;劲松HPV防治诊疗中心谭巍主任将介绍五种能够…

使用IDEA生成JavaDoc文档(IDEA2023)

1、Tool-->Generate JavaDoc 2、配置生成JavaDoc文档 1、选择生成范围&#xff0c;可以根据需要选择单独一个文件或者包&#xff0c;也可以是整个项目 2、输出目录&#xff0c;要把JavaDoc文档生成在哪个文件中&#xff0c;最好新建一个文件夹结束 3、Local&#xff1a;…

hadoop mapreduce的api调用WordCount本机和集群代码

本机运行代码 package com.example.hadoop.api.mr;import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache…

Leetcode—100.相同的树【简单】明天写另一种解法!

2023每日刷题&#xff08;十八&#xff09; Leetcode—100.相同的树 递归实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ bool isSameTree(struct TreeNode* p, struc…

C++之栈容器

1.简介 stack &#xff0c;栈(堆栈)&#xff0c;是一种先进后出(First In Last Out,FILO)的数据结构&#xff0c;先插入的数据在栈底&#xff0c;后放入的数据在栈顶&#xff0c;所有的数据只能从栈顶取出。   在生活中先进后出的例子友很多&#xff0c;例如我们在桌子上摞书…

最亮那颗星的中年危机 —— 程序员的职场困境与破局

如果说最近的这十年国内市场什么工作是最受瞩目的&#xff0c;那么程序员绝对算得上是夜空中最闪亮的那颗星。 伴随科技的迅猛发展&#xff0c;计算机走进千家万户&#xff0c;智能终端深深融入每个人的生活&#xff0c;程序员这一职业群体也逐渐成为了现代社会中不可或缺的一…

掌控你的Mac性能:System Dashboard Pro,一款专业的系统监视器

作为Mac用户&#xff0c;你是否曾经想要更好地了解你的电脑性能&#xff0c;以便优化其运行&#xff1f;是否想要实时监控系统状态&#xff0c;以便及时发现并解决问题&#xff1f;如果你有这样的需求&#xff0c;那么System Dashboard Pro就是你的不二之选。 System Dashboar…

Visual Studio使用Git忽略不想上传到远程仓库的文件

前言 作为一个.NET开发者而言&#xff0c;有着宇宙最强IDE&#xff1a;Visual Studio加持&#xff0c;让我们的开发效率得到了更好的提升。我们不需要担心环境变量的配置和其他代码管理工具&#xff0c;因为Visual Studio有着众多的拓展工具。废话不多说&#xff0c;直接进入正…