牛客小白月赛97 (个人题解)(待补完)

前言:

  前天晚上写的一场牛客上比赛,虽然只写出了三道,但比起之前的成绩感觉自己明显有了一点进步了,继续努力吧,

正文:

 链接:牛客小白月赛97_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)

A 三角形:

#include<bits/stdc++.h>
using namespace std;
int a[100005];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+n+1);int flag=0;for(int i=1;i<=n-2;i++){if(a[i]==a[i+1]&&a[i+1]==a[i+2])flag=1;}if(flag)cout<<"YES"<<endl;else cout<<"NO"<<endl;return 0;
}

签到题,我是排序后看看有没有三个连续相等的数字。更好的做法应该是用桶排看看有没有出现次数超过三的数字,其实都差不多。

B 好数组:

#include <bits/stdc++.h>
using namespace std;int main()
{int n,x,f=1,a=0;cin>>n;for(int i=0;i<n;i++){cin>>x;if(x==0) f=0;}if(f==0) cout<<"NO"<<endl;else cout<<"YES"<<endl;return 0;
}

又一道签到题,只要包含0就不是好数组。

C 前缀平方和序列:

#include<bits/stdc++.h>
using namespace std;
int n,x;
const long long mod=1e9+7;
typedef long long ll;
ll quick(ll a,ll b){ll res=1;while(b){if(b%2)res=res*a%mod;a=a*a%mod;b/=2;}return res;
}
ll f[10005];
void init(){f[0]=1;for(int i=1;i<=10005;i++){f[i]=f[i-1]*i%mod;}
}
ll inv(ll x){return quick(x,mod-2)%mod;
}
int main(){init();cin>>n>>x;ll cnt=(ll)sqrt(x);if(cnt<n){cout<<0<<endl;return 0;}//cout<<f[cnt]<<" "<<inv(f[n])<<" "<<inv(f[cnt-n])<<endl;ll ans=(f[cnt]*((inv(f[n])%mod*inv(f[cnt-n]%mod))%mod))%mod;cout<<ans<<endl;return 0;
}

预处理阶乘和逆元(费马小定理),然后求组合数,注意要开long long,并且在计算过程中一定要时时取模否则会暴。

D 走一个大整数迷宫:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[15][15],b[15][15];
bool book[15][15][10005];
ll n,m,p;
ll quick(ll a,ll b,ll mod){ll res=1;while(b){if(b%2)res=res*a%mod;a=a*a%mod;b/=2;}return res;
}
int ne[4][2]={{0,-1},{0,1},{1,0},{-1,0}};
typedef struct stu{int x;int y;int z;int c;
}node;
int ans=1e9+7;
queue<node> q;
void bfs(int x,int y,int z,int c){node k={x,y,z,c};q.push(k);while(!q.empty()){k=q.front();q.pop();if(book[k.x][k.y][k.c%(p-1)])continue;book[k.x][k.y][k.c%(p-1)]=true;	if(k.x==n&&k.y==m&&k.c%(p-1)==0){ans=min(k.z,ans);break;}for(int i=0;i<4;i++){int nx=k.x+ne[i][0];int ny=k.y+ne[i][1];if(nx>=1&&nx<=n&&ny>=1&&ny<=m){//cout<<nx<<" "<<ny<<" "<<k.z+1<<" "<<k.c+a[nx][ny]<<endl;int cc=(k.c+a[nx][ny])%(p-1);node l={nx,ny,k.z+1,cc};q.push(l);}}}
}
int main(){cin>>n>>m>>p;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>b[i][j];}}bfs(1,1,0,a[1][1]);if(ans==1e9+7)cout<<-1;else cout<<ans;return 0;
}

首先咱们先看c的表式方式

首先我们要知道我们最后要求的数是对(p-1)取模的数,我们完全可以在输入的时候就将图上的数直接取模。然后我们再对Cij进行简化,很容易发现p^{2^{bij}}对(p-1)取模一直都为1。

(由于p^{2^{bij}}=(p-1+1)^{2^{bij}}

可以将p^{2^{bij}}展开为1+x_{1}(p-1)^{1}+x_{2}(p-1)^{2}+...+x_{n}(p-1)^{n}

然后用bfs跑分层图,第一、二维为x,y,第三维为走到这个点时的计数器上的数对(p-1)取模的结果(这样能避免多走但计数器取模后一样的情况)。具体写法见上。如果能搜到答案就输出,不然就输出-1.

E 前缀和前缀最大值:

#include<bits/stdc++.h>
using namespace std;
int a[100005];
int pre[100005],sum[100005][101];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]<0)pre[i]=pre[i-1]-a[i];else pre[i]=pre[i-1];for(int j=1;j<=100;j++){sum[i][j]=sum[i-1][j]+(a[i]==j);}}int q;cin>>q;for(int i=1;i<=q;i++){int l,r,tmp=0;cin>>l>>r;int t=pre[r]-pre[l-1];int res=0;int cnt=0;for(int j=1;j<=100;j++){int k=sum[r][j]-sum[l-1][j];if(k!=0){if(k*j+res>=t){cnt+=(t-res)/j;break;}else cnt+=k;res+=k*j;//cout<<" "<<t<<" "<<cnt<<" "<<res<<endl;}}cout<<cnt+1<<endl;}return 0;
}

这题是我看了他发的答案才写出来的,咱们首先得要知道他的A类价值数是连续的,可能又相等的值,但一定是一个区间内的所有数,考虑 A 类价值最小的方案,是从小到大排序序列 a。然后进行n 次,将序列 a 的最后一个数字移动到最前面。会发现这样操作序列 a 的 A 类价值是单调不减的,并且每次只移动一个数,增量只可能是0 或者 1。所以可以得出一个结论,A 类价值是连续的。所以我们最后只需要求他的最大A的值r和最小A值l,答案就为r-l+1。上界即为正数个数,下界就是从小到大排的第一个正数前缀到尾的距离。

F parent 树上启发式合并(待补):

看着好高级。

后记:

  我还是太菜了。

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

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

相关文章

如何用DCA1000持续采集雷达数据

摘要&#xff1a;本文介绍一下如何通过mmwave studio软件&#xff0c;搭配DCA1000数据采集卡&#xff0c;对AWR1843BOOST进行不间断的数据采集。本文要求读者已经掌握了有关基础知识。 本文开放获取&#xff0c;无需关注。 到SensorConfig页面下&#xff0c;一步步操作&#xf…

ubuntu 18 虚拟机安装(3)安装mysql

ubuntu 18 虚拟机安装&#xff08;3&#xff09;安装mysql 参考 https://cloud.tencent.com/developer/article/1700780 技术分享 | MySQL 设置管理员密码无法生效一例 https://cloud.tencent.com/developer/article/2014384 在Ubuntu18.04上安装MySQL &#xff5c; 超级详细…

283. 移动零【快慢指针】【C++】

题目描述 移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nu…

无人机挂载抛弹吊舱技术详解

随着无人机技术的飞速发展&#xff0c;无人机在军事、安全、农业、环保等领域的应用越来越广泛。其中&#xff0c;挂载抛弹吊舱的无人机在精确打击、应急处置等场合发挥着重要作用。抛弹吊舱技术通过将弹药、物资等有效载荷挂载在无人机下方&#xff0c;实现了无人机的远程投放…

昇思25天学习打卡营第7天|模型训练

模型训练 模型训练一般分为四个步骤&#xff1a; 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 前面几天依次学习了前面几个步骤的操作&#xff0c;今天继续学习模型训练。 数据集和神经网络模型这个前面已经有详细的介绍。准确…

JVM(13):虚拟机性能分析和故障解决工具之Visual VM

1 Visual VM作用 是到目前为止随JDK发布的功能最强大的运行监视和故障处理程序&#xff0c;并且可以遇见在未来一段时间内都是官方主力发展的虚拟机故障处理工具。官方在VisualVM的软件说明中写上了“All-in-One”的描述字样&#xff0c;预示着他除了运行监视、故障处理外&…

ConcurrentHashMap是如何保证线程安全的-put方法简要分析

简介 ConcurrentHashMap 是 Java 中并发编程中常用的线程安全的哈希表&#xff08;HashMap&#xff09;实现。它具有以下几个显著的特点和优点&#xff0c;适合在特定的并发场景中使用&#xff1a; 线程安全性&#xff1a; ConcurrentHashMap 提供了并发访问的线程安全保证&am…

左耳听风_032_31_编程范式游记2-_泛型编程

你好&#xff0c;我是陈浩网名英&#xff0c;做耳朵house.在上一节课中呢&#xff0c;我们从c语言开始说起&#xff0c;聊了聊面向过程式的辩证范式。 那相信从代码的角度呢&#xff0c;你对这种类型的语言啊已经有了一些理解。 那作为一门高级语言呢&#xff0c;c语言啊它绝…

python进阶函数

目录 函数多返回值函数多种传参方式匿名函数 函数多返回值 问&#xff1a;如果一个函数如些两个return&#xff08;如下所示&#xff09;&#xff0c;程序如何执行&#xff1f; def return_num():return 1return 2result return_num() print(result)答&#xff1a;只执行了第…

Web3 前端攻击:原因、影响及经验教训

DeFi的崛起引领了一个创新和金融自由的新时代。然而&#xff0c;这种快速增长也吸引了恶意行为者的注意&#xff0c;他们试图利用漏洞进行攻击。尽管很多焦点都集中在智能合约安全上&#xff0c;但前端攻击也正在成为一个重要的威胁向量。 前端攻击的剖析 理解攻击者利用前端漏…

DDD学习笔记三

模型的构造块&#xff1a;实体、值对象、领域服务 &#xff08;1&#xff09;实体的领域特征 在领域中&#xff0c;一个由身份而不是属性值定义的客观概念就是实体&#xff0c;这个身份可以由一个唯一标识确认。 一个概念是否是实体取决于系统的应用场景&#xff0c;一个标识是…

ORA-00903: invalid table name\nORA-06512: at line 1\n

错误信息 ORA-00903: invalid table name\nORA-06512: at line 1\n原因 ORA-00903: invalid table name 解释: 这个错误表示在 SQL 语句中使用了无效的表名。 由于在建表中出现了以数字开头的表名,所以出现以下错误 解决方案 表名不能以数字开头

RabbitMQ交换器类型

直连交换机&#xff08;Direct Exchange&#xff09; 直连交换机的工作方式是最简单的路由模式&#xff0c;它会根据消息的routing key将其精确地路由到与之绑定的队列上。每个队列通过一个特定的routing key与交换机绑定。如果一条消息的routing key与队列的绑定键完全匹配&am…

AWT的菜单组件

AWT的菜单组件 前言一、菜单组件的介绍常见的菜单相关组件常见菜单相关组件集成体系图菜单相关组件使用小要点 二、AWT菜单组件的代码示例示例一示例二实现思路 前言 推荐一个网站给想要了解或者学习人工智能知识的读者&#xff0c;这个网站里内容讲解通俗易懂且风趣幽默&…

【Python】Pickle:Python对象序列化与反序列化的利器

在Python编程中&#xff0c;我们经常需要在程序的不同运行之间保存和加载数据&#xff0c;这时候&#xff0c;Python标准库中的pickle模块就派上了用场。pickle模块可以将Python对象序列化为字节流&#xff0c;便于存储到文件或通过网络传输&#xff1b;同时&#xff0c;它也可…

CentOS 7 和 CentOS Stream 8 的主要区别

更新频率&#xff1a; CentOS 7&#xff1a;传统的稳定版本&#xff0c;主要用于生产环境&#xff0c;更新频率较低&#xff0c;主要包含安全补丁和重要修复。CentOS Stream 8&#xff1a;滚动发布版本&#xff0c;更新更频繁&#xff0c;包含最新的特性和改进。它处于 Fedora …

springboot汽车租赁管理系统-计算机毕业设计源码08754

目 录 摘 要 第 1 章 引 言 1.1 选题背景和意义 1.2 国内外研究现状 1.3 论文结构安排 第 2 章 系统的需求分析 2.1 系统可行性分析 2.1.1 技术方面可行性分析 2.1.2 经济方面可行性分析 2.1.3 法律方面可行性分析 2.1.4 操作方面可行性分析 2.2 系统功能需求分析…

基于线调频小波变换的非平稳信号分析方法(MATLAB)

信号处理领域学者为了改进小波变换在各时频区间能量聚集性不高的缺点&#xff0c;有学者在小波分析基础上引入调频算子构成了线性调频小波变换&#xff0c;线调频小波一方面继承了小波变换的理论完善性&#xff0c;另一方面用一个新的参数&#xff08;线调频参数&#xff09;刻…

Nginx 配置文件

Nginx的配置文件的组成部分&#xff1a; 主配置文件&#xff1a;nginx.conf子配置文件&#xff1a;include conf.d/*.conf 全局配置 nginx 有多种模块 核心模块&#xff1a;是 Nginx 服务器正常运行必不可少的模块&#xff0c;提供错误日志记录 、配置文件解析 、事件驱动机…

46 - 删除重复的电子邮箱(高频 SQL 50 题基础版)

46 - 删除重复的电子邮箱 delete p1 from Person p1,Person p2 where p1.emailp2.email and p1.id>p2.id;