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.mzph.cn/bicheng/51860.shtml

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

相关文章

51 单片机的Keil5软件

1. KEIL C51 软件获取 博主网盘下载&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1YBfrRh2L7SIehS5xLQkAow?pwd4211 提取码&#xff1a;4211 也可以在 KEIL 的官网上下载&#xff1a;http:// https://www.keil.com/download/product/ 打开界面如下图所示&#xff1…

读零信任网络:在不可信网络中构建安全系统04最小特权

1. 公钥基础设施 1.1. PKI 1.2. 数字证书本身并不能解决身份认证问题 1.2.1. 需要一种方法来验证获得的公钥的确属于某人 1.2.2. 公钥基础设施&#xff08;PKI&#xff09;解决了这个问题 1.3. PKI定义了一组角色及其职责&#xff0c;能够在不可信的网络中安全地分发和验证…

AMQP-核心概念-终章

本文参考以下链接摘录翻译&#xff1a; https://www.rabbitmq.com/tutorials/amqp-concepts 连接&#xff08;Connections&#xff09; AMQP 0-9-1连接通常是长期保持的。AMQP 0-9-1是一个应用级别的协议&#xff0c;它使用TCP来实现可靠传输。连接使用认证且可以使用TLS保护…

观远BI经验总结

观远BI经验总结 观远BI&#xff08;Galaxy platform&#xff09;简介 ​ 观远数据是一站式智能分析平台&#xff0c;为企业提供数据分析可视化与智能决策服务&#xff0c;打通数据采集-数据接入-数据管理-数据开发-数据分析-AI建模-AI模型运行-数据应用全流程&#xff0c;全方…

Golang | Leetcode Golang题解之第300题最长递增子序列

题目&#xff1a; 题解&#xff1a; func lengthOfLIS(nums []int) int {if len(nums)<1{return len(nums)}dp : make([]int,len(nums))for i:0;i<len(nums);i{dp[i]1}res : 1for i:1;i<len(nums);i{for j:0;j<i;j{if nums[i] > nums[j]{dp[i] max(dp[i],dp[j…

录制创意无限的视频:2024年热门免费录屏软件精选

录屏会帮助我们捕捉屏幕上每一帧的精彩瞬间&#xff0c;不论是直播还是学习甚至是工作的会议都能用到这个功能。如果找到一款好用的免费录屏软件&#xff0c;那我们录屏时候会更随意&#xff0c;更愉悦一些吧。 1.福昕录屏大师 链接&#xff1a;www.foxitsoftware.cn/REC/ 这款…

【扒代码】X = output[:,:,y1:y2,x1:x2].sum()

假设我们有以下输入&#xff1a; output 是一个形状为 (1【batch size】, 1【channel】, 10, 10) 的张量&#xff0c;表示一个 10x10 的输出图像。boxes 是一个形状为 (1【index】, 2, 5) 的张量&#xff0c;表示两个边界框&#xff0c;每个边界框包含 5 个值 [index, y1, x1,…

AttributeError: ‘str‘ object has no attribute ‘decode‘

AttributeError: ‘str‘ object has no attribute ‘decode‘ 目录 AttributeError: ‘str‘ object has no attribute ‘decode‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#x…

springBoot 3.X整合camunda

camunDa camunDa 是2013年从Activiti5 中分离出来的一个新的工作流引擎。Camunda 官方提供了 Camunda Platform、Camunda Modeler&#xff0c;其中 Camunda Platform 以 Camunda engine 为基础为用户提供可视化界面&#xff0c;Camunda Modeler 是流程文件建模平台&#xff0c…

虚拟换装的一个项目:IMAGDressing-v1

虚拟换装的一个项目&#xff1a;IMAGDressing-v1 IMAGDressing-v1是一个可定制虚拟着装系统&#xff0c;可以生成逼真的服装并支持场景编辑 特点&#xff1a; 1、支持服装生成&#xff0c;可根据&#xff0c;例如文本提示、图像、姿势等&#xff0c;生成逼真的服装图像&…

GuLi商城-商品服务-API-平台属性-规格参数新增与VO

重写保存方法: @Transactional(rollbackFor = Exception.class) @Ove

Linux驱动编程 - 字符设备驱动

目录 简介&#xff1a; 一、字符设备驱动框架 1、字符设备驱动入口 2、字符设备驱动加载过程 2.1 申请设备号 2.1.1 分配设备号函数 (1) 静态分配函数 (2) 动态分配函数 (3) 注销设备号 2.1.2 设备号中的主/次设备号 2.1.3 申请设备号示例 2.2 注册字符设备 2.2.1 cd…

手摸手教你撕碎西门子S7通讯协议06--S7Read读取short数据

1、S7通讯回顾 - &#xff08;1&#xff09;建立TCP连接 Socket.Connect-》已实现 - &#xff08;2&#xff09;发送访问请求 COTP-》已实现 - &#xff08;3&#xff09;交换通信信息 Setup Communication-》已实现 - &#xff08;4&#xff09;执行相关操作 …

如何使用rdma-core来实现RDMA操作

rdma-core 是一个开源项目&#xff0c;为远程直接内存访问&#xff08;RDMA&#xff09;提供用户空间的支持。它包括 RDMA 设备的驱动程序、库和工具&#xff0c;旨在简化 RDMA 应用的开发和部署。 基础知识参考博文&#xff1a; 一文带你了解什么是RDMA RDMA 高性能架构基本…

Langchain--如何使用大模型 2.0

【&#x1f34a;易编橙终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官、CSDN人工智能领域优质创作者 。 Langch…

【已解决】嵌入式linux mobaxterm unable to open connection to comx 串口正常连接,但终端无法输入

1.点击Session重新选择串口&#xff0c;注意看看串口是不是连接到虚拟机&#xff0c;导致串口被占用。 2.选择PC机与开发板连接的串口&#xff0c;不知道的话可以打开设备管理器看看&#xff0c;选择正确的波特率&#xff0c;一般是115200。 3.关键一步&#xff1a;选择后别急…

【计算机网络原理】网络层IP协议的总结和数据链路层以太网协议的总结.

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

MobaXterm tmux 配置妥当

一、事出有因 缘由&#xff1a;接上篇文章&#xff0c;用Docker搭建pwn环境后&#xff0c;用之前学过的多窗口tmux进行调试程序&#xff0c;但是鼠标滚动的效果不按预期上下翻屏。全网搜索很难找到有效解决办法&#xff0c;最后还是找到了一篇英文文章&#xff0c;解决了&…

正点原子imx6ull-mini-Linux设备树下的LED驱动实验(4)

1&#xff1a;修改设备树文件 在根节点“/”下创建一个名为“alphaled”的子节点&#xff0c;打开 imx6ull-alientek-emmc.dts 文件&#xff0c; 在根节点“/”最后面输入如下所示内容 alphaled {#address-cells <1>;#size-cells <1>;compatible "atkalp…

25.惰性队列

介绍 消费者由于各种原因而致使长时间不能消费消息造成堆积。比如有一百万条消息发送到mq中&#xff0c;消费者这时宕机了不能消费消息&#xff0c;造成了消息堆积。惰性队列就有必要了。 正常情况下&#xff0c;消息保存在内存中。消费者从内存中读取消息消费&#xff0c;速…