2023 icpc杭州(M,J,D,G,H)
文章目录
- [M. V-Diagram](https://codeforces.com/gym/104976/problem/M)
- [J. Mysterious Tree](https://codeforces.com/gym/104976/problem/J)
- [D.Operator Precedence](https://codeforces.com/gym/104976/problem/D)
- [G. Snake Move](https://codeforces.com/gym/104976/problem/G)
- [H. Sugar Sweet II](https://codeforces.com/gym/104976/problem/H)
M. V-Diagram
题意:
给一个V图,求一个连续子序列平均值最大的V图
首先,要保证是V字形,最小的和左右两个是一定要保留的,然后,如果某个小的选了,那么选比它大的肯定是提高平均值的,所以把V字形的一边全选了,至于为什么不把另一边也一起选了,是因为,有可能已经选的一边数非常大,而另一边数非常小,那么会拉低平均值,同理,只选另一边,以及选择整个V字形
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=3e5+10;
int a[N];
int n;
void solve() {cin>>n;int minn=2e9;for(int i=1;i<=n;i++) cin>>a[i],minn=min(minn,a[i]);double ans=0;int idx;for(int i=1;i<=n;i++){if(a[i]==minn){idx=i;break;}}double sum=0;for(int i=1;i<=idx+1;i++) sum+=a[i];ans=max(ans,sum/(idx+1));sum=0;for(int i=n;i>=idx-1;i--) sum+=a[i];ans=max(ans,sum/(n-idx+2));sum=0;for(int i=1;i<=n;i++) sum+=a[i];ans=max(ans,sum/n);printf("%.10f\n",ans);
}
signed main() {
// ios::sync_with_stdio(false);
// cin.tie(0);
// cout.tie(0);int t=1;cin>>t;while(t--) {solve();}return 0;
}
J. Mysterious Tree
题意:
一棵树,可能是链或者菊花,每次询问一条边存在性,确定是链还是菊 花。询问次数⌈n 2⌉+3
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
int n;
void solve() {cin>>n;if(n%2==0){for(int i=1;i<=n;i+=2){cout<<"? "<<i<<' '<<i+1<<endl;cout.flush();int x;cin>>x;if(x==1){if(i==1){cout<<"? "<<1<<' '<<3<<endl;cout.flush();int x;cin>>x;if(x==1){cout<<"? "<<1<<' '<<4<<endl;cout.flush();int x;cin>>x;if(x==1){cout<<"! "<<2<<endl;cout.flush();return;}else{cout<<"! "<<1<<endl;cout.flush();return;}}else{cout<<"? "<<2<<' '<<3<<endl;cout.flush();int x;cin>>x;if(x==0){cout<<"! "<<1<<endl;cout.flush();return;}else{cout<<"? "<<2<<' '<<4<<endl;cout.flush();int x;cin>>x;if(x==0){cout<<"! "<<1<<endl;cout.flush();return;}else{cout<<"! "<<2<<endl;cout.flush();return;}}}}else{cout<<"? "<<i<<' '<<1<<endl;cout.flush();int x;cin>>x;if(x==1){cout<<"? "<<i<<' '<<2<<endl;cout.flush();int x;cin>>x;if(x==1){cout<<"! "<<2<<endl;cout.flush();return;}else{cout<<"! "<<1<<endl;cout.flush();return;}}else{cout<<"? "<<i+1<<' '<<1<<endl;cout.flush();int x;cin>>x;if(x==0){cout<<"! "<<1<<endl;cout.flush();return;}else{cout<<"? "<<i+1<<' '<<2<<endl;cout.flush();int x;cin>>x;if(x==0){cout<<"! "<<1<<endl;cout.flush();return;}else{cout<<"! "<<2<<endl;cout.flush();return;}}}}}}cout<<"! "<<1<<endl;cout.flush();}else{for(int i=1;i<=n-1;i+=2){cout<<"? "<<i<<' '<<i+1<<endl;cout.flush();int x;cin>>x;if(x==1){if(i==1){cout<<"? "<<1<<' '<<3<<endl;cout.flush();int x;cin>>x;if(x==1){cout<<"? "<<1<<' '<<4<<endl;cout.flush();int x;cin>>x;if(x==1){cout<<"! "<<2<<endl;cout.flush();return;}else{cout<<"! "<<1<<endl;cout.flush();return;}}else{cout<<"? "<<2<<' '<<3<<endl;cout.flush();int x;cin>>x;if(x==0){cout<<"! "<<1<<endl;cout.flush();return;}else{cout<<"? "<<2<<' '<<4<<endl;cout.flush();int x;cin>>x;if(x==0){cout<<"! "<<1<<endl;cout.flush();return;}else{cout<<"! "<<2<<endl;cout.flush();return;}}}}else{cout<<"? "<<i<<' '<<1<<endl;cout.flush();int x;cin>>x;if(x==1){cout<<"? "<<i<<' '<<2<<endl;cout.flush();int x;cin>>x;if(x==1){cout<<"! "<<2<<endl;cout.flush();return;}else{cout<<"! "<<1<<endl;cout.flush();return;}}else{cout<<"? "<<i+1<<' '<<1<<endl;cout.flush();int x;cin>>x;if(x==0){cout<<"! "<<1<<endl;cout.flush();return;}else{cout<<"? "<<i+1<<' '<<2<<endl;cout.flush();int x;cin>>x;if(x==0){cout<<"! "<<1<<endl;cout.flush();return;}else{cout<<"! "<<2<<endl;cout.flush();return;}}}}}}cout<<"? "<<n<<' '<<1<<endl;cout.flush();int x;cin>>x;cout<<"? "<<n<<' '<<2<<endl;cout.flush();int y;cin>>y;cout<<"? "<<n<<' '<<3<<endl;cout.flush();int z;cin>>z;if(x==1&&y==1&&z==1){cout<<"! "<<2<<endl;cout.flush();}else {cout<<"! "<<1<<endl;cout.flush();}}
}
signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;cin>>t;while(t--) {solve();}return 0;
}
D.Operator Precedence
题意:
构造2*n个数,满足
( a 1 a_1 a1 a 2 a_2 a2)+( a 3 a_3 a3 a 4 a_4 a4)+…( a 2 n − 1 a_{2n-1} a2n−1 a 2 n a_{2n} a2n)= a 1 a_1 a1( a 2 a_2 a2+ a 3 a_3 a3)( a 4 a_4 a4+ a 5 a_5 a5)…( a 2 n − 2 a_{2n-2} a2n−2+ a 2 n − 1 a_{2n-1} a2n−1) a 2 n a_{2n} a2n
且最终结果不等于0
构造题,往往用最特殊,最简单的,自己构造,肯定简单化而不是复杂化
由于中间全部乘起来,如果存在大于2的数,那么最后会非常非常大,不可控,所以构造若干个1相乘
设序列为x -1 2 -1 2…-1 2 y
所以x * y = -x-(n-2) * 2+2 * y
令y=1,则x=-x-2 * n + 4 +2
得2 * x= 6 - 2 * n
得 x =3 - n
由于所有数都不能为0,所以特判一下n为3的情况,直接抄样例
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
int n;
void solve() {cin>>n;if(n==3){cout<<"1 -10 6 6 -10 1"<<endl;return;}cout<<3-n<<' ';for(int i=0;i<(2*n-2)/2;i++){cout<<-1<<' '<<2<<' ';}cout<<1<<endl;
}
signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;cin>>t;while(t--) {solve();}return 0;
}
G. Snake Move
题意:
给定n×m地图上的一条长度为k的贪吃蛇。每次操作可以控制贪吃蛇 移动一步或者缩短一格蛇身。对于每个位置,求从初始状态出发最少需要多少次操作使得蛇头到达该处,平方和模 2 64 2^{64} 264
首先分析一下操作,要么蛇头移动一格,身子往前补充原来的位置,蛇尾的位置就空出来了,要么蛇头不动,直接把蛇尾的位置空出来
假设只有蛇头,那么蛇头到任何位置只要跑一个最简单的最短路就可以了,但是由于每次移动只有蛇尾能空出来,所以对于不是蛇身的位置直接跑最短路,而蛇身的位置不能只是简单的最短路,蛇的第i截是在第k-i次之后才空出来,所以我们需要要取max(k-i+1,dist+1)
注意,模 2 64 2^{64} 264就是unsigned int long long
#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
typedef pair<int,int>PII;
typedef pair<int,PII>PIII;
const int N=3010;
int n,m,k;
int cnt[N][N];
long long dist[N][N];
char s[N][N];
bool vis[N][N];
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
void dijkstra(int a,int b){for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){dist[i][j]=1e18;}}dist[a][b]=0;priority_queue<PIII,vector<PIII>,greater<PIII>>heap;heap.push({0,{a,b}});while(heap.size()){auto t=heap.top();heap.pop();int d=t.first,x=t.second.first,y=t.second.second;if(vis[x][y]) continue;vis[x][y]=true;for(int i=0;i<4;i++){int tx=x+dx[i],ty=y+dy[i];if(tx<1||tx>n||ty<1||ty>m) continue;if(vis[tx][ty]||s[tx][ty]=='#') continue;if(dist[tx][ty]>max(d+1,cnt[tx][ty]+1)){dist[tx][ty]=max(d+1,cnt[tx][ty]+1);heap.push({dist[tx][ty],{tx,ty}});}}}
}
void solve() {cin>>n>>m>>k;int sta,stb;for(int i=1;i<=k;i++){int x,y;cin>>x>>y;cnt[x][y]=k-i;if(i==1) sta=x,stb=y;}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>s[i][j];}}dijkstra(sta,stb);unsigned int long long ans=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(dist[i][j]==1e18) continue;ans+=dist[i][j]*dist[i][j];}}cout<<ans<<endl;
}
signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;
// cin>>t;while(t--) {solve();}return 0;
}
H. Sugar Sweet II
题意:
n 个数a1,a2…an,有 n 个事件,每个事件形如:如果 ai<bi,则 ai = ai +wi,事件随机顺序发生,问每个数的期望
首先,事件是随机发生的,那么肯定和事件发生的顺序有关,我们来分析一下
如果a[i]<a[b[i]],那么事件一定会发生,因为a[b[i]]只能增不能减,所以不管事件的顺序是怎么样的,a[i]始终小于a[b[i]],所以a[i]必定能加上w[i],也就是说a[i]的期望就是a[i]+w[i]
如果a[i]>=a[b[i]]+w[b[i]],那么事件一定不会发生,因为就算先发生a[b[i]]+w[b[i]]这一事件,a[i]也不可能小于a[b[i]],所以a[i]的期望就是a[i]
如果a[b[i]]<=a[i]<a[b[i]]+w[b[i]],那么a[i]+w[i]这一事件发生当且仅当a[b[i]]+w[b[i]]这一事件发生,具有严格的依赖关系
trick:
如果出现严格的依赖关系,可以建图
如果a[i]+w[i]这一事件发生当且仅当a[b[i]]+w[b[i]]这一事件发生,那么连一条边,b[i]->i,建好图之后,当前事件发生当且仅当它前面的事件全部发生并且顺序必须是按照建图的顺序来的,假设它前面有x-1个事件,那么随便排列,只有一种是可以的,概率就是1/x!
所以我们预处理一下深度就可以了
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=5e5+10,mod=1e9+7;
int a[N],b[N],w[N];
int fac[N],ifac[N];
int dist[N];
int n;
int qmi(int a,int b){int res=1;while(b){if(b&1) res=res*a%mod;a=a*a%mod;b>>=1;}return res;
}
vector<vector<int>>e(N);
void dfs(int u){for(auto v:e[u]){dist[v]=dist[u]+1;dfs(v);}
}
void solve() {cin>>n;for(int i=1;i<=n;i++) e[i].clear(),dist[i]=0;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++) cin>>b[i];for(int i=1;i<=n;i++) cin>>w[i];for(int i=1;i<=n;i++){if(a[i]<a[b[i]]) dist[i]=1;else if(a[i]>=a[b[i]]+w[b[i]]) dist[i]=0;else e[b[i]].push_back(i);}for(int i=1;i<=n;i++){if(dist[i]==1){dfs(i);}}for(int i=1;i<=n;i++){if(dist[i]==0) cout<<a[i]<<' ';else if(dist[i]==1) cout<<(a[i]+w[i])%mod<<' ';else cout<<((a[i]+w[i]*ifac[dist[i]])%mod+mod)%mod<<' ';}cout<<endl;
}
signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//预处理阶乘以及阶乘的逆元fac[0]=ifac[0]=1;//0的阶乘是1,0的阶乘的逆元也是1for(int i=1;i<N;i++) fac[i]=fac[i-1]*i%mod;//预处理阶乘ifac[N-1]=qmi(fac[N-1],mod-2);//先求出fac[N-1]的逆元,由于(n+1)!=n!*(n+1)==>n!^(-1)=(n+1)!^(-1)*(n+1),所以也可以通过递推得到阶乘的逆元for(int i=N-2;i>=1;i--) ifac[i]=1ll*ifac[i+1]*(i+1)%mod;cin>>t;while(t--) {solve();}return 0;
}
相关文章:
2023 icpc杭州(M,J,D,G,H)
文章目录 [M. V-Diagram](https://codeforces.com/gym/104976/problem/M)[J. Mysterious Tree](https://codeforces.com/gym/104976/problem/J)[D.Operator Precedence](https://codeforces.com/gym/104976/problem/D)[G. Snake Move](https://codeforces.com/gym/104976/probl…...
在CentOS 7上安装Alist
在CentOS 7上安装Alist 的步骤如下: 1. 卸载旧版本 如果你之前安装过旧版本的Docker,可以先卸载它: sudo yum remove docker docker-common docker-snapshot docker-engine2. 安装依赖包 确保你的系统是最新的,并安装必要的依…...
【C/C++】memcpy函数的模拟实现
零.导言 上一篇博客我们学习了memcpy函数,不妨我们现在尝试模拟实现memcpy函数的功能。 一.实现memcpy函数的要点 memcpy函数是一种C语言内存函数,可以按字节拷贝任意类型的数组,因此我们自定义的模拟函数需要两个无类型的指针参数ÿ…...
嵌入式开发之线程互斥
目录 互斥锁初始化-pthread_mutex_init 申请锁-pthread_mutex_lock 释放锁-pthread_mutex_unlock 同步 VS 互斥 临界资源:一次只允许一个任务(进程、线程)访问的共享资源,不允许多个任务同时访问的。 临界区:访问临界区的代码 互斥机制:mutex互斥锁,任务访问临界资…...
JavaScript 变量作用域与函数调用机制:var 示例详解
JavaScript 变量作用域与函数调用机制:var 示例详解 在 JavaScript 中,作用域和闭包是理解变量生命周期和行为的核心概念。通过以下这段代码,我们将详细分析如何在不同的作用域内使用 var 关键字,并解释相关的变量访问规则 代码解…...
Linux(CentOS)安装 JDK
1、下载 JDK 官网:https://www.oracle.com/ 2、上传 JDK 文件到 CentOS,使用FinalShell远程登录工具,并且使用 root 用户登录 3、解压 JDK 创建目录 /export/server mkdir -p /export/server 解压到目录 /export/server tar -zxvf jdk-17…...
AI产品经理实战手册:策略、开发与商业化指南
通过《AI产品经理手册》,将可以了解不同类型的AI,如何将AI整合到产品或业务中,以及支持创建AI产品或将AI集成到现有产品所需的基础设施。熟悉实践管理AI产品开发流程、评估和优化AI模型,以及应对与AI产品相关的复杂伦理和法律问题…...
【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用
【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用 目录 文章目录 【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用目录摘要研究背景问题与挑战如何解决创新点算法模型1. 知识总结模块(Knowledge Summarization Module&…...
Linux之初体验
目录 第1关:1-Linux初体验 第2关:1-Linux常用命令 第3关:1-Linux 查询命令帮助语句 第4关:2--查询命令-locate 第5关:2--查询命令-which/whereis 第6关:2--查询命令-find 第7关:3-Linux文…...
现代化水电管理:Spring Boot在大学城的实践
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
黑马官网2024最新前端就业课V8.5笔记---HTML篇
Html 定义 HTML 超文本标记语言——HyperText Markup Language。 标签语法 标签成对出现,中间包裹内容<>里面放英文字母(标签名)结束标签比开始标签多 /拓展 : 双标签:成对出现的标签 单标签:只有开…...
GS-Blur数据集:首个基于3D场景合成的156,209对多样化真实感模糊图像数据集。
2024-10-31,由韩国首尔国立大学的研究团队创建的GS-Blur数据集,通过3D场景重建和相机视角移动合成了多样化的真实感模糊图像,为图像去模糊领域提供了一个大规模、高覆盖度的新工具,显著提升了去模糊算法在真实世界场景中的泛化能力…...
Linux下Java的多种方式安装
Linux下Java的多种方式安装 博客: www.lstar.icu 开源地址 Gitee 地址: https://gitee.com/lxwise/iris-blog_parent Github 地址: https://github.com/lxwise/iris-blog_parent 序言 Java是一门面向对象的编程语言,不仅吸收了…...
Android Studio:connect time out
参考:Android Studio:connect time out_android studio connection timed out-CSDN博客...
A014-基于Spring Boot的家电销售展示平台设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...
数学期望和联合概率密度
数学期望的定义 数学期望是描述随机变量平均趋势的一个重要统计量。根据随机变量的类型(离散或连续),数学期望的定义有所不同。 离散型随机变量的数学期望: 若离散型随机变量 X X X取值为 x 1 , x 2 , … , x n , … x_1,x_2,\do…...
萤石私有化设备视频平台EasyCVR视频融合平台如何构建农业综合监控监管系统?
现代农业的迅速发展中,集成监控管理系统已成为提高农业生产效率和优化管理的关键工具。萤石私有化设备视频平台EasyCVR,作为一个具有高度可扩展性、灵活的视频处理能力和便捷的部署方式的视频监控解决方案,为农业监控系统的建设提供了坚实的技…...
【MongoDB】Windows/Docker 下载安装,MongoDB Compass的基本使用、NoSQL、MongoDB的基础概念及基础用法(超详细)
文章目录 Windows下载MongoDB Compass使用NoSQL的基本概念MongoDB常用术语MongoDB与RDBMS区别MongoDB的CRUD 更多相关内容可查看 Docker安装MongoDB可查看:Docker-安装MongoDB Windows下载 官网下载地址:https://www.mongodb.com/try/download/communi…...
微信小程序-自定义导航栏
一.自定义导航栏 1.JSON文件中配置"navigationStyle": “custom” "navigationStyle": "custom"2.给导航栏设置轮播图 <swiper class"custom-swiper" indicator-dots autoplay interval"2000"> <swiper-item>…...
vue中强制更新视图
vue3 中强制更新视图 方式 通过 $forceUpdate 与 vue2 相似 import {getCurrentInstance} from vueconst internalInstance getCurrentInstance() //操作数据后更新视图 internalInstance.ctx.$forceUpdate()通过 key 值改变更新 <compName :key"key" />co…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
李沐--动手学深度学习--GRU
1.GRU从零开始实现 #9.1.2GRU从零开始实现 import torch from torch import nn from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps) #初始化模型参数 def …...
ABB馈线保护 REJ601 BD446NN1XG
配电网基本量程数字继电器 REJ601是一种专用馈线保护继电器,用于保护一次和二次配电网络中的公用事业和工业电力系统。该继电器在一个单元中提供了保护和监控功能的优化组合,具有同类产品中最佳的性能和可用性。 REJ601是一种专用馈线保护继电器…...
