VP牛客小白月赛88(A---F)(收获很多)

感觉难度梯度有点大,前4个都十分基础,E和F比较的难,直接看题(按照个人的收获从大到小排)

可以用启发式合并但是太菜了还不会(等以后来填坑),这里用map+并查集的思想来十分巧妙地化解。

我们令next[L][i]表示只有后L个操作序列,i变成了next[l][i],我们假设倒数第l+1个操作为把3变成6,容易得到递推式:

next[l][4]=next[l+1][4]....next[l+1][3]=next[l][6].这样我们可以得到从l--->l+1,除了该次命令外的值都相同,只改变了该次命令涉及的,这样子我们就可以舍弃第一维,这样子从反向建边时间与空间复杂度都可以了。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int t,n,m,x[1000100],y[1000100],a[1000100];
map<int,int> fa;
void solve(){for(int i=m;i>=1;i--){if(fa.count(y[i])){fa[x[i]]=fa[y[i]];}else fa[x[i]]=y[i];}for(int i=1;i<=n;i++){if(fa.count(a[i])==0) cout<<a[i]<<" ";else cout<<fa[a[i]]<<" ";}
}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);cin>>t;while(t--){fa.clear();cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=m;i++) cin>>x[i]>>y[i];solve();cout<<endl;}
}

我们直接看最左上的方块沿着ur方向模拟光的反射路径图,下面是实现该模拟代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,d,ansx,ansy,ans;
bool vis[2100][2100];
struct node{int x,y;
};
queue<node> q;
int dx=-1,dy=1;
int main(){cin>>n>>m;vis[1][1]=1;q.push({1,1});while(!q.empty()){node ck=q.front();q.pop();int xx=ck.x+dx,yy=ck.y+dy;if((xx==0&&yy==0)||(xx==n+1&&yy==m+1)||(xx==0&&yy==m+1)||(xx==n+1&&yy==0)){break;} if(xx==0){dx=-dx;if(vis[1][yy]) break;vis[1][yy]=1;q.push({1,yy});}else if(yy==0){dy=-dy;if(vis[xx][1]) break;vis[xx][1]=1;q.push({xx,1}); }else if(xx==n+1){dx=-dx;if(vis[n][yy]) break;vis[n][yy]=1;q.push({n,yy});}else if(yy==m+1){dy=-dy;if(vis[xx][m]) break;vis[xx][m]=1;q.push({xx,m}); }else{if(vis[xx][yy]) break;vis[xx][yy]=1;q.push({xx,yy});}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cout<<vis[i][j];}cout<<endl;}}

简单的01DP,加一个处理循环条件的即可。下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,a[6000];
bool dp[5100][5100];
int main(){cin>>n>>m;for(int i=1;i<=m;i++) scanf("%d",&a[i]);for(int i=1;i<=m;i++) a[i]=a[i]%n;dp[0][1]=1;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){int k1=(j-a[i]+n-1)%n+1;int k2=(j+a[i]-1)%n+1;dp[i][j]=dp[i-1][k1]||dp[i-1][k2];}}if(dp[m][1]==1) cout<<"Yes";else cout<<"No";
}

纯模拟,直接上代码:

#include<bits/stdc++.h>
using namespace std;
int n,h,m;
int a[2000];
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>h>>m;int ck=60*h+m;a[ck-1]=1;a[ck-3]=1;a[ck-5]=1;}int cnt=0;for(int i=1;i<=2000;i++){if(a[i]) cnt++;}cout<<cnt<<endl;for(int i=1;i<=2000;i++){if(a[i]){cout<<i/60<<" "<<i%60<<endl;}}
}

两点注意:

1.用&之类的记得整体加个括号。

2.含有空格的字符串可以用getline(cin,  )来实现:

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
char op,c;
string a[6];
int main(){for(int i=1;i<=5;i++){getline(cin,a[i]);//有空格的字符串}if(a[3][5]=='&'){cout<<((a[2][0]-'0')&(a[4][0]-'0'));//加括号!!!}else if(a[3][5]=='='){cout<<((a[2][0]-'0')|(a[4][0]-'0'));}else cout<<(1-(a[3][0]-'0'));
}

一道贪心水题:

#include<bits/stdc++.h>
using namespace std;
int x,n,max1,w;
char a,b;
int main(){cin>>x;cin>>n;for(int i=1;i<=n;i++){cin>>a>>w;if(w>max1){max1=w;b=a;}}int ck;if(x%max1==0) ck=x/max1;else ck=x/max1+1;if(ck>1000) cout<<-1;else{for(int i=1;i<=ck;i++) cout<<b;}
}

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

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

相关文章

LabelImg:一个简单易用的图像标注工具

目录 LabelImg是什么&#xff1f; 如何使用LabelImg进行图像标注&#xff1f; LabelImg的优势和应用场景 在哪里下载它 随着人工智能技术的不断发展&#xff0c;机器学习和深度学习在图像识别、目标检测等领域中得到了广泛的应用。而要训练一个有效的模型&#xff0c;通常需…

Apache服务的搭建与配置

一、apache安装 systemctl stop firewalldsystemctl disable firewalldsetenforce 0yum -y install httpdsystemctl start httpdnetstat -ntlp | grep 80 二、认识主配置文件 # vim /etc/httpd/conf/httpd.conf ServerRoot "/etc/httpd" #定义工作目…

复制表

目录 复制表 将部门 30 的所有员工信息保存在 emp30 表中 将复杂查询结果创建为表 只将 emp 表的结构复制为 empnull 表 从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 复制表 严格来说&#xff0c;复制表不是复制操作&am…

Intel® Extension for PyTorch*详细安装教程

最近在研究Intel的pytorch的加速拓展Intel Extension for PyTorch*,但是发现官网的文档全是英文的&#xff0c;不太好找安装教程。所以特此分享Intel Extension for PyTorch*的详细安装教程。 文章目录 一、安装所需系统要求1.1 硬件需求1.2 软件需求 二、准备2.1 安装驱动程序…

Kafka 面试题及答案整理,最新面试题

Kafka中的Producer API是如何工作的&#xff1f; Kafka中的Producer API允许应用程序发布一流的数据到一个或多个Kafka主题。它的工作原理包括&#xff1a; 1、创建Producer实例&#xff1a; 通过配置Producer的各种属性&#xff08;如服务器地址、序列化方式等&#xff09;来…

Spring Boot整合MyBatis Plus配置多数据源

Spring Boot 专栏&#xff1a;https://blog.csdn.net/dkbnull/category_9278145.html Spring Cloud 专栏&#xff1a;https://blog.csdn.net/dkbnull/category_9287932.html GitHub&#xff1a;https://github.com/dkbnull/SpringBootDemo Gitee&#xff1a;https://gitee.com/…

[Angular 基础] - 表单:模板驱动表单

[Angular 基础] - 表单&#xff1a;模板驱动表单 之前的笔记&#xff1a; [Angular 基础] - routing 路由(上) [Angular 基础] - routing 路由(下) [Angular 基础] - Observable Angular 内置两种表单的支持&#xff0c;这篇写的就是第一种&#xff0c;即模板驱动表单 (Tem…

vue学习笔记22-组件传递多种数据类型props效验

组件传递多种数据类型 通过props传递数据&#xff0c;不仅可以传递字符串类型的数据&#xff0c;还可以是其他类型&#xff0c;例如&#xff1a;数字、对象、数组等&#xff0c;但实际上任何类型的值都可以作为props的值被传递&#xff08;即组件与组件之间的传递是没有限制的…

MySQL-----存储过程

▶ 介绍 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合&#xff0c;调用存储过程可以简化应用开发人员的很多工作&#xff0c;减少数据在数据库和应用服务器之间的传输&#xff0c;对于提高数据处理的效率是有好处的。 存储过程思想上很简单&#xff0c;…

[金三银四] 系统调用相关

2.36 系统调用的详细流程 Linux 在x86上的系统调用通过 int 0x80 实现&#xff0c;用系统调用号来区分入口函数。操作系统实现系统调用的基本过程是&#xff1a; 应用程序调用库函数&#xff08;API&#xff09;&#xff1b;API 将系统调用号存入寄存器&#xff08;EAX&#…

Git分支管理(Git分支的原理、创建、切换、合并、删除分支)

系列文章目录 文章一&#xff1a;Git基本操作 文章目录 系列文章目录前言一、Git分支是什么二、Git分支的原理三、创建分支四、切换分支五、合并分支六、删除分支 前言 在上一篇文章中&#xff0c;我们学习了如何使用Git的一些基本操作&#xff0c;例如安装Git、创建本地仓库…

Redis安全加固策略:绑定Redis监听的IP地址 修改默认端口 禁用或者重命名高危命令

Redis安全加固策略&#xff1a;绑定Redis监听的IP地址 & 修改默认端口 & 禁用或者重命名高危命令 1.1 绑定Redis监听的IP地址1.2 修改默认端口1.3 禁用或者重命名高危命令1.4 附&#xff1a;redis配置文件详解&#xff08;来源于网络&#xff09; &#x1f496;The Beg…