2024杭电多校第三场

目录

1001-深度自同构

1003-游走

1007-单峰数列

1008-比特跳跃

1011-抓拍

1012-死亡之组


1001-深度自同构

每个数的答案其实与它的各个因数有关,正向递推一下

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+5;
const int mod=998244353;
int a[N],d[N],f[N];
void solve(){int n;cin>>n;cout<<1<<' ';a[1]=1;for(int i=2;i<=n;i++){f[i]+=1;}for(int i=2;i<=n;i++){d[i]=a[i-1];a[i]=(d[i]+f[i])%mod;for(int j=i*2;j<=n;j+=i)f[j]=(f[j]+d[i])%mod;cout<<a[i]<<' ';}
}
signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;
//    cin >> t;while (t--) solve();return 0;
}

1003-游走

主要是几个点要注意

1:每次插入的数前后路程距离不能大于时间差距,奇偶性要相同,

2:如果开头是一段连续的1,那最小和最大需要特殊考虑

3:最小的答案一定是不减的

#include "bits/stdc++.h"using namespace std;
#define int long longbool check(int q1, int p1, int q2, int p2, int &mint, int &maxt) {int dp = abs((p1 - p2));if (p2 != 1) {maxt = min(maxt, q2 - dp);}if (p1 == 1 && (q2 - q1) % 2 != dp % 2 && q2 - q1 >= dp) {mint = max(mint, q1 + 1);return true;}return dp % 2 == (q2 - q1) % 2 && dp <= q2 - q1;}void solve() {int n, m;cin >> n >> m;map<int, int> f;f[0] = 1;bool bad = false;int mint = 0;int maxt = numeric_limits<int>::max();while (m--) {int op;cin >> op;if (op == 0) {int p, q;cin >> p >> q;if (bad) {continue;}if (f.count(q)) {if (f[q] != p) {bad = true;}continue;}auto it = f.emplace(q, p).first;auto itl = prev(it);auto [q1, p1] = *itl;auto [q2, p2] = *it;if (!check(q1, p1, q2, p2, mint, maxt)) {bad = true;continue;}auto itr = next(it);auto [q3, p3] = *itr;if (itr != f.end() && !check(q2, p2, q3, p3, mint, maxt)) {bad = true;}if (mint > maxt) {bad = true;}} else if (op == 1) {if (bad) {cout << "bad" << '\n';} else {cout << mint << '\n';}} else {if (bad) {cout << "bad" << '\n';} else if (maxt == numeric_limits<int>::max()) {cout << "inf" << '\n';} else {cout << maxt << '\n';}}}
}signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T = 1;cin >> T;while (T--)solve();return 0;
}

1007-单峰数列

线段树维护

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e5+50;
int treez[maxn<<2],treef[maxn<<2],treegd[maxn<<2];
int a[maxn],c[maxn];
void pushup(int p) {                 //更新节点的值treez[p]=treez[p<<1]+treez[p<<1|1];treef[p]=treef[p<<1]+treef[p<<1|1];treegd[p]=treegd[p<<1]+treegd[p<<1|1];
}
void build(int p,int l,int r) {     //建树 树节点为p (左儿子p*2 右儿子p*2+1) l为区间左端点 r为右端点if(l==r) {if(c[l]>0) treez[p]++;else if(c[l]<0) treef[p]++;return;}int mid=(l+r)>>1;build(p<<1,l,mid);build(p<<1|1,mid+1,r);pushup(p);if(c[mid]>0&&c[mid+1]<0) treegd[p]++;else if(c[mid]<0&&c[mid+1]>0) treegd[p]+=10;
}void update(int p,int l,int r,int x,int y,int w) { //更新区间 (x,y) 的值 改变量为wif(l==r) {if(c[l]>0) treez[p]--;else if(c[l]<0) treef[p]--;c[l]=c[l]+w;if(c[l]>0) treez[p]++;else if(c[l]<0) treef[p]++;return;}int mid=(l+r)>>1;if(x<=mid)update(p<<1,l,mid,x,y,w);if(mid<y)update(p<<1|1,mid+1,r,x,y,w);pushup(p);if(c[mid]>0&&c[mid+1]<0) treegd[p]++;else if(c[mid]<0&&c[mid+1]>0) treegd[p]+=10;
}int queryz(int p,int l,int r,int x,int y) {int ans=0,mid=(l+r)>>1;if(x<=l&&r<=y) {return treez[p];}if(x<=mid) ans+=queryz(p<<1,l,mid,x,y);if(mid<y) ans+=queryz(p<<1|1,mid+1,r,x,y);return ans;
}
int queryf(int p,int l,int r,int x,int y) {int ans=0,mid=(l+r)>>1;if(x<=l&&r<=y) {return treef[p];}if(x<=mid) ans+=queryf(p<<1,l,mid,x,y);if(mid<y) ans+=queryf(p<<1|1,mid+1,r,x,y);return ans;
}
int querygd(int p,int l,int r,int x,int y) {int ans=0,mid=(l+r)>>1;if(x<=l&&r<=y) {return treegd[p];}if(x<=mid) ans+=querygd(p<<1,l,mid,x,y);if(mid<y) ans+=querygd(p<<1|1,mid+1,r,x,y);if(x<=mid&&mid<y) {if(c[mid]>0&&c[mid+1]<0) ans++;else if(c[mid]<0&&c[mid+1]>0) ans+=10;}return ans;
}
void solve() {int n,q,x,y,w,numz,numf,numgd;int op;cin>>n;for(int i=1; i<=n; i++)cin>>a[i];for(int i=0; i<=n; i++)c[i]=a[i+1]-a[i];
//	for(int i=0;i<=n;i++) cout<<i<<' '<<c[i]<<'\n';build(1,1,n);cin>>q;for(int i=1; i<=q; i++) {cin>>op;if(op==1) {cin>>x>>y>>w;if(x>0) update(1,1,n,x-1,x-1,w);update(1,1,n,y,y,-1*w);} else if(op==2) {cin>>x>>y;if(x==y) {cout<<1<<'\n';continue;}numz=queryz(1,1,n,x,y-1);numf=queryf(1,1,n,x,y-1);if(!numz&&!numf) cout<<1<<'\n';else cout<<0<<'\n';} else if(op==3) {cin>>x>>y;if(x==y) {cout<<1<<'\n';continue;}numz=queryz(1,1,n,x,y-1);if(numz==y-x) cout<<1<<'\n';else cout<<0<<'\n';} else if(op==4) {cin>>x>>y;if(x==y) {cout<<1<<'\n';continue;}numf=queryf(1,1,n,x,y-1);if(numf==y-x) cout<<1<<'\n';else cout<<0<<'\n';} else {cin>>x>>y;if(x==y) {cout<<0<<'\n';continue;}numgd=querygd(1,1,n,x,y-1);numz=queryz(1,1,n,x,y-1);numf=queryf(1,1,n,x,y-1);if(numgd==1&&numz+numf==y-x) cout<<1<<'\n';else cout<<0<<'\n';}}
}
signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;
//    cin >> t;while (t--) solve();return 0;
}

1008-比特跳跃

首先,如果不考虑已经有的道路,只进行跳跃的话,跳两次一定比跳一次更优。所以首先可以从1出发,连到每个点,先连一条边,权值为比特跳跃的花费。

其次考虑二进制位,如1100可以由1000和100这样的只有一位01不同的转移过来,因为上一个前提,最多就连续跳一次,所以可以对于每个数,遍历每个二进制位,把一个0的位置变成1,把前后两个数进行连边。复杂度是18*n

最后跑一边迪杰斯特拉即可。

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+5;
const int mod=998244353;
int n,m,k;
vector<pair<int,int>>to[N];
int dis[N];
int vis[N];
void dij(){dis[1] = 0 ;priority_queue<pair<int,int>>q;q.push({0,1});while(!q.empty()){int  u =q.top().second;q.pop();vis[u] = 1;for(int i=0;i<to[u].size();i++){int v =to[u][i].first;int w =to[u][i].second;if(vis[v])continue;if(dis[v]>dis[u]+w){dis[v]=dis[u]+w;q.push({-dis[v],v});}}}}void bfs(){queue<int>q;for(int i=0;i<=18;i++){int k=1<<i;if(k<=n){q.push(k);vis[k]=1;}}while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<=17;i++){if(((x>>i)&1)==0){int y=x|(1<<i);if(y>n)continue;to[x].push_back({y,(x|y)*k});to[y].push_back({x,(x|y)*k});dis[y]=min(dis[y],dis[x]+(x|y)*k);if(vis[y]==1)continue;q.push(y);vis[y]=1;}}}
}
void solve(){cin >>n>>m>>k;for(int i=1;i<=n;i++){dis[i] = 1e15;to[i].clear();}for(int i=2;i<=n;i++){to[1].push_back({i,k*(1|i)});}for(int i=1,u,v,w;i<=m;i++){cin>>u>>v>>w;w=min(w,(u|v)*k);to[u].push_back({v,w});to[v].push_back({u,w});}for(int i=1;i<=n;i++)vis[i]=0;bfs();for(int i=1;i<=n;i++)vis[i]=0;dij();for(int i=2;i<=n;i++)cout<<dis[i]<<" ";cout<<'\n';}
signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;cin >> t;while (t--) solve();return 0;
}
/*** 1
6 4 3
1 3 2
1 5 20
2 4 1
4 6 10** */

1011-抓拍

处理出边界,进行三分

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+5;
const int mod=998244353;
int lx[4],rx[4],ly[4],ry[4];
int jxx1,jxx2,jxy1,jxy2;
int n;
int cf1d0[4],c0dz1[4];
int tim[10],js=0;
string s;
struct node{int x,y;
};
vector<node>v[4];
double check(double t){double maxx=-1*1e12,minx=1e12,maxy=-1*1e12,miny=1e12;if(!v[0].empty()){maxx=max((double)rx[0],maxx);minx=min((double)lx[0],minx);maxy=max((double)ry[0]+t,maxy);miny=min((double)ly[0]+t,miny);}if(!v[1].empty()){maxx=max((double)rx[1],maxx);minx=min((double)lx[1],minx);maxy=max((double)ry[1]-t,maxy);miny=min((double)ly[1]-t,miny);}if(!v[2].empty()){maxx=max((double)rx[2]+t,maxx);minx=min((double)lx[2]+t,minx);maxy=max((double)ry[2],maxy);miny=min((double)ly[2],miny);}if(!v[3].empty()){maxx=max((double)rx[3]-t,maxx);minx=min((double)lx[3]-t,minx);maxy=max((double)ry[3],maxy);miny=min((double)ly[3],miny);}return (maxx-minx)*2+(maxy-miny)*2;
}
void solve(){node t;for(int i=0;i<4;i++){lx[i]=1e12;rx[i]=-1*1e12;ly[i]=1e12;ry[i]=-1*1e12;}cin>>n;for(int i=1;i<=n;i++){cin>>t.x>>t.y>>s;if(s[0]=='N') v[0].push_back(t);if(s[0]=='S') v[1].push_back(t);if(s[0]=='E') v[2].push_back(t);if(s[0]=='W') v[3].push_back(t);}for(int i=0;i<4;i++){for(int j=0;j<v[i].size();j++){t=v[i][j];lx[i]=min(t.x,lx[i]);rx[i]=max(t.x,rx[i]);ly[i]=min(t.y,ly[i]);ry[i]=max(t.y,ry[i]);}}double l=0,r=2e9;double mid1,mid2;while(fabs(r-l)>=1e-6){mid1=l+(r-l)/3.0;mid2=l+(r-l)*2/3.0;if(check(mid1)<check(mid2)) r=mid2;else l=mid1;}int aa=(int)l;int ans;ans=min(min(check(max(0ll,aa-1)),check(aa)),check(aa+1));cout<<ans<<'\n';
}
signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;
//    cin >> t;while (t--) solve();return 0;
}

1012-死亡之组

考虑小于的个数,以及自身是否小于l即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
const int N = 2e5 + 100;
const int mod=998244353;int a[N];
void solve(){int n,l,d;cin>>n>>l>>d;for(int i=1;i<=n;i++){cin>>a[i];}int k=a[1];sort(a+1,a+n+1);int cnt=0;for(int i=1;i<=n;i++){if(a[i]<l)cnt++;}if(cnt>=3){if(k>=l){if(k-a[1]>d){cout<<"Yes"<<'\n';}else{cout<<"No"<<'\n';}}else{if(a[n]-a[1]>d){cout<<"Yes"<<'\n';}else{cout<<"No"<<'\n';}}}else{cout<<"No"<<'\n';}
}signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T = 1;cin>>T;while (T--)solve();return 0;
}

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

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

相关文章

计算机毕业设计选题推荐-服装生产管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

超市客流统计,AI智能分析算法,生成精准客户画像

随着科技的进步&#xff0c;零售行业正经历着前所未有的变革。其中&#xff0c;超市作为零售业态的重要组成部分&#xff0c;面临着如何更有效地吸引顾客、提升购物体验、增加销售额等挑战。借助先进的客流统计系统和AI智能分析算法&#xff0c;超市不仅能够准确地统计客流量&a…

共建数智江城:生态沃土如何孕育技术普惠的硕果

当人们热议一线、新一线等城市综合竞争力时&#xff0c;数字经济早已成为城市之间竞争的新赛道。 作为国家首批智慧城市建设试点城市&#xff0c;武汉一直是数字经济发展的先锋。2023年&#xff0c;武汉建成数字经济产业园区30家&#xff0c;数字经济规模占地区生产总值比重达4…

一篇文章教你学会二叉树的链表实现及其oj题(附源码)

前言 前面我们通过堆实现了二叉树&#xff0c;接下来我们用链表实现二叉树。 1. 实现链式结构二叉树 1.1 结构体定义 二叉树的每个结点需要两个指针&#xff0c;分别指向其左孩子和右孩子。还有一个结点域&#xff0c;存储数据。 还是将数据类型重命名&#xff0c;便于后面…

【JavaEE】通过Linux部署Web项目到云服务器上

一.配置部署所需的环境. 1.1 什么是部署? 要想知道什么是部署, 就要先了解我们在日常开发的过程中所设计到的几种环境: 开发环境: 软件开发环境指的是开发人员在创建、测试和部署软件应用程序时所需的一系列硬件、软件、工具和流程的集合。它是为了支持软件开发过程而构建的…

文件包含漏洞--pyload

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.PHP伪协议利用 php://协议 php://filter &#xff1a;用于在读取作用和写入文件时进行过滤和转换操作。 作用1&#xff1a;利用base64编码过滤器读取源码 通常利用文件包含执行php://filte…

哈希表专题

题解之前&#xff1a; 1.有关unordered_map的count功能&#xff1a;查询key&#xff01; Leetcode 1.两数之和 解题思路&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> res;// key:具体的数值(便…

【计算机毕业设计】838装修公司CRM系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

c# - - - ASP.NET Core 网页样式丢失,样式不对

c# - - - ASP.NET Core 网页样式丢失&#xff0c;样式不对 问题 正常样式是这样的。 修改项目名后&#xff0c;样式就变成这样了。底部的内容跑到中间了。 解决 重新生成解决方案&#xff0c;然后发布网站。 原因&#xff1a; 修改项目名之前的 div 上有个这个自定义属…

大数据采集工具——Flume简介安装配置使用教程

Flume简介&安装配置&使用教程 1、Flume简介 一&#xff1a;概要 Flume 是一个可配置、可靠、高可用的大数据采集工具&#xff0c;主要用于将大量的数据从各种数据源&#xff08;如日志文件、数据库、本地磁盘等&#xff09;采集到数据存储系统&#xff08;主要为Had…

React Native在移动端落地实践

在移动互联网产品迅猛发展的今天&#xff0c;技术的不断创新使得企业越来越注重降低成本、提升效率。为了在有限的开发资源下迅速推出高质量、用户体验好的产品&#xff0c;以实现公司发展&#xff0c;业界催生了许多移动端跨平台解决方案。这些方案不仅简化了开发流程&#xf…

C#基于SkiaSharp实现印章管理(5)

印章中最常见的特殊形状通常是五角星&#xff0c;空心、实心的都可能存在&#xff0c;本文学习并实现在印章内部绘制五角星形状。   百度五角星的绘制方法&#xff0c;主要分为三种&#xff1a;   1&#xff09;五角星各点坐标固定&#xff0c;直接调用编程语言的绘制线条或…

校车购票小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;我的乘车信息管理&#xff0c;车辆信息管理&#xff0c;座位管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;车辆信息&#xff0c;我的 开发系统…

推荐一款专注批量推送消息的轻量工具,支持主流平台的消息推送,简单、高效、低成本(附源码)

前言 在数字化时代&#xff0c;企业和个人面临着日益增长的消息推送需求。然而&#xff0c;现有的推送处理方案往往存在一些挑战和不足&#xff0c;如cao作复杂、成本高昂、缺乏灵活性等。这些问题不仅影响了推送效率&#xff0c;也增加了用户的负担。此外&#xff0c;随着工作…

SpringCloud+Vue3主子表插入数据(芋道)

目的&#xff1a;多表联查获取到每个班级里面所有的学生上课的信息。点击消课插入到消课主表和消课子表&#xff0c;主表记录班级信息&#xff0c;消课人员信息&#xff0c;上课时间。子表记录上课学员的信息&#xff0c;学员姓名、手机号、班级名称、班级类型、上课时间、老师…

词的向量化和文本向量化

词的向量化和文本向量化 向量化one-hot编码提前准备词表不提前准备词表one-hot缺点 词向量简介词向量的定义和目标word embedding和word vector的区别onehot编码与词向量关系构建 训练方式1&#xff08;基于语言模型&#xff09;训练方式2&#xff08;基于窗口&#xff09;CBOW…

Javascript前端面试基础(八)

window.onload和$(document).ready区别 window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行$(document).ready()是DOM结构绘制完毕后就执行&#xff0c;不必等到加载完毕 window.onload 触发时机&#xff1a;window.onload 事件会在整个页面&#xf…

[css3] 如何设置边框颜色渐变

div {border: 4px solid;border-image: linear-gradient(to right, #8f41e9, #578aef) 1; }参考&#xff1a; 5种CSS实现渐变色边框&#xff08;Gradient borders方法的汇总

银行贷款信用评分不足?大数据帮你找回失去的“分”

在这个信息爆炸的时代&#xff0c;无论是个人还是企业&#xff0c;数据都成为了衡量信用和评估风险的重要依据。贷款、融资、求职甚至是日常消费&#xff0c;都可能因为一份好的数据报告而变得更加顺畅。那么&#xff0c;如何高效地查询自己的大数据&#xff0c;面对评分不足时…

文件上传漏洞(ctfshow web151-161)

Web151 F12修改源代码 exts后面png改为php 这样就可以上传php的文件了 Web152&#xff1a; 考点&#xff1a;后端不能单一校验 就是要传图片格式&#xff0c;抓个包传个png的图片 然后bp抓包修改php后缀解析 然后放包 Web153-web156 在php代码中可以使用“{}”代替“[]” …