牛客小白月赛97

A.三角形

判断等边三角形,题不难,代码如下:

#include <iostream>

using namespace std;

int a[110];

int main()
{
    int n;
    cin >> n;
    
    int x;
    int mx = 0;
    for(int i = 1; i <= n; i++)
    {
        cin >> x;
        mx = max(mx, x);
        a[x]++;
    }
    
    for(int i = 1; i <= mx; i++)
        if(a[i] >= 3)
        {
            cout << "YES" << endl;
            return 0;
        }
    cout << "NO" << endl;
    
    return 0;
}

B.好数组

分析:因为0<=  a_{i} <= 1e9,如果要满足​|a_{i}-a_{j}| < a_{i}*a_{j},那么a_{i}就只能大于0,如果取到等于0,带入下就会发现不合适,因此只要数组中存在等于零的数,那就不是一个好数组,代码如下:

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    
    int x;
    cin >> x;
    
    bool f = 0;
    
    for(int i = 1; i <= n; i++)
    {
        cin >> x;
        if(!x) f = 1;//判断x是否为0
    }
    
    if(f) cout << "NO" << endl;
    else cout << "YES" << endl;
    
    return 0;
}

C.前缀平方和序列

分析:我们需要在x的范围内去找n个平方数,如果x的范围内有a个平方数,那么找到的平方数的种类就是C_{a}^{n},数据范围只有1e3,因此我们可以用杨辉三角直接递推,代码如下:

#include <iostream>
#include <math.h>

using namespace std;

const int N = 1010, mod = 1e9+7;

int c[N][N];

int main()
{
    int n, x;
    cin >> n >> x;
    
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j <= i; j++)
        {
            if(!j) c[i][j] = 1;
            else c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;
        }
    }
    
    int a = pow(x, 1.0/2);//确定x范围内有多少个平方数
    
    cout << c[a][n] << endl;
    
    return 0;
}

D.走一个大整数迷宫

分析:这个题的p^{2^{bi,j}}只是一个幌子,我想了半天没想出来要怎么去求出来这个数,为什么要说是幌子呢?因为这个数最终要对(p-1)取模,p的任意次方对(p-1)取模后都为1,也就是说bi,j这个根本没有用,理解这个后,写个bfs就可以了,代码如下:

#include <iostream>
#include <queue>
#include <tuple>
#include <string.h>

using namespace std;

const int N = 15, M = 1e4+10;
const int dx[4] = {0, 0, 1, -1};
const int dy[4] = {1, -1, 0, 0};

int a[N][N];
int n, m, p;
int steps[N][N][M];

int bfs()
{
    queue<tuple<int, int, int, int>> q;
    
    q.push({0, 0, a[0][0]%(p-1), 0});
    
    steps[0][0][a[0][0]] = 0;
    
    while(!q.empty())
    {
        auto [x, y, c, step] = q.front();
        q.pop();
        
        if(x == n-1 && y == m-1 && c == 0)
        {
            return step;
        }
        
        int nx, ny, nc;
        for(int i = 0; i < 4; i++)
        {
            nx = x + dx[i], ny = y + dy[i];
            
            if(nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
            
            nc = (c + a[nx][ny])%(p-1);
            
            //防止重复的搜某个状态
            if(steps[nx][ny][nc] == -1 || steps[nx][ny][nc] > step + 1)
            {
                q.push({nx, ny, nc, step+1});
                steps[nx][ny][nc] = step+1;
            }
        }
        
    }
    
    return -1;
}

int main()
{
    cin >> n >> m >> p;
    
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            cin >> a[i][j];
    int x;
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            cin >>x;
    
    memset(steps, -1, sizeof steps);
    
    cout << bfs() << endl;
    
        
    return 0;
}

E.前缀和前缀最大值

分析:首先求一下序列a的前缀和,假设照度为len,然后 0<= i <= len,分别求出它的前i个数的最大值,然后A类价值就是这些最大值的个数,B类价值就是序列a的所有排列中A类价值的种类数;

可以先求出A类价值的上界和下届,然后B类价值就是上界减下届加一(因为在上界和下届中的A类价值的种类数都是可以取到的),上界就是区间中所有正数的数量,下届就是所有负数在前,正数从小到大排列,得到的相应最大值的种类数

至于为什么是这样,首先决定A类价值的是序列a中前缀和最大值的种类,一个正数一定会使当前的前缀和比前一个的前缀和大,即最大前缀和种类数加一,而一个负数一定会使当前的前缀和比原来小,不会是最大前缀和种类加一,所以上界就是所有正数排在前边的时候,即正数的种类数;而下界的话,之所以是所有负数在前,因为这样会使当前的前缀和越来越小,从而尽可能的让遇见正数后不会使最大前缀种类数增加(如图),并且要使尽可能多的正数被消耗掉,那就是正数在负数后从小到大排列。

又因为种类数是上界减去下届加一,即那就是下界中被负数抵消掉的那部分正数的数量,然后我们发现bi的取值范围很小只有100,所以可以直接记录在1~100范围内相应正数的数量,然后询问时再进行枚举

代码如下:

#include <iostream>

using namespace std;

const int N = 1e5+10;

int a[N];
int fsum[N];//fsum存储负数的前缀和
int sum[N][110];

int main()
{
    int n;
    cin >> n;
    
    for(int i = 1; i <= n; i++) 
    {
        cin >> a[i];
        //求负数的绝对值的前缀和
        if(a[i] < 0) fsum[i] = fsum[i-1] - a[i];
        else fsum[i] = fsum[i-1];
        
        for(int j = 1; j <= 100; j++)
        {
            //记录前i个数中正数j出现的次数
            sum[i][j] = sum[i-1][j] + (a[i] == j);
        }
    }
    
    int q;
    cin >> q;
    
    int l, r;
    while(q--)
    {
        cin >> l >> r;
        
        int t = fsum[r] - fsum[l-1];
        
        int ans = 0;
        
        for(int i = 1; i <= 100; i++)
        {
            //求出正数i在l~r中出现的次数
            int j = sum[r][i] - sum[l-1][i];
            //如果相应的正数对应的总和小于等于区间中负数的总和
            if(i*j <= t)
            {
                t-=i*j;
                ans += j;//ans加上相应正数出现的次数
            }
            else
            {
                //如果某个正数i的总和大于区间中负数的总和
                //ans就加上负数中对应的正数j出现的次数
                ans += t/i;
                break;
            }
        }
        
        ans++;//s0也算一种
        
        cout << ans << endl;
        
    }
    
    
    return 0;
}

F.

不会

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java OnVif应用PTZ控制

研究OnVif在Java程序中应用&#xff0c;在此作记录&#xff0c;onvif-java-lib/release at master milg0/onvif-java-lib GitHub&#xff0c;在此连接中下载jar&#xff0c;并在项目中引用&#xff0c;该jar封装很好&#xff0c;可以方便快速完成功能 1.登录OnVif 2.PTZ控制…

【大数据】—美国交通事故分析(2016 年 2 月至 2020 年 12 月)

引言 在当今快速发展的数字时代&#xff0c;大数据已成为我们理解世界、做出决策的重要工具。特别是在交通安全领域&#xff0c;大数据分析能够揭示事故模式、识别风险因素&#xff0c;并帮助制定预防措施&#xff0c;从而挽救生命。本文将深入探讨2016年2月至2020年12月期间&…

反射(通俗易懂)

一、反射(Reflection) 反射就是:加载类&#xff0c;并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等) 动态语言&#xff0c;是一类在运行时可以改变其结构的语言&#xff1a;例如新的函数、对象、甚至代码可以被引进&#xff0c;已有的函数可以被删除或是其他…

强化学习的数学原理:值迭代与策略迭代

概述 从课程地图上可以看出来&#xff0c;这是本门课程中第一次正式的介绍强化学习的算法&#xff0c;并且是一个 model-based 的算法&#xff0c;而在下一节课将会介绍第一个 model-free 的算法&#xff08;在 chapter 5&#xff09;。而这两节和之前所学的 BOE 是密切相关的&…

笔记-python爬虫概述

目录 常用第三方库 爬虫框架 动态页面渲染1. url请求分析2. selenium3. phantomjs4. splash5. spynner 爬虫防屏蔽策略1. 修改User-Agent2. 禁止cookies3. 设置请求时间间隔4. 代理IP池5. 使用Selenium6. 破解验证码常用第三方库 对于爬虫初学者&#xff0c;建议在了解爬虫原…

DEX: Scalable Range Indexing on Disaggregated Memory——论文泛读

arXiv Paper 论文阅读笔记整理 问题 内存优化索引[2&#xff0c;3&#xff0c;18&#xff0c;27&#xff0c;42]对于加速OLTP至关重要&#xff0c;但随着数据大小&#xff08;以及索引大小&#xff09;的增长&#xff0c;对内存容量的需求可能会超过单个服务器所能提供的容量…

基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 控制系统概述 4.2 ADRC基本框架 4.3 控制律设计 5.完整工程文件 1.课题概述 基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真&#xff0c;分别对YAW&#xff0c;PITCH&#xff0c;ROL…

golang写的自动更新器

文件自动更新器&#xff0c;这个很多端游和软件都有用到的。 golang的rpc通信&#xff0c;是非常好用的一个东西&#xff0c;可以跟调用本地函数一样&#xff0c;调用远程服务端的函数&#xff0c;直接从远程服务端上拉取数据下来&#xff0c;简单便捷。 唯一的遗憾就是&#x…

互联网盲盒小程序的市场发展前景如何?

近几年来&#xff0c;盲盒成为了大众热衷的消费市场。盲盒是一个具有随机性和惊喜感&#xff0c;它能够激发消费者的好奇心&#xff0c;在拆盲盒的过程中给消费者带来巨大的愉悦感&#xff0c;在各种的吸引力下&#xff0c;消费者也愿意为各类盲盒买单。如今&#xff0c;随着盲…

暑假提升(2)[平衡二叉树之一--AVL树]

我不去想未来是平坦还是泥泞&#xff0c;只要热爱生命一切&#xff0c;都在意料之中。——汪国真 AVLTree 1、诞生原因2、什么是AVL树3、如何设计AVL树3、1、AVL树节点的定义3、2、AVL树的插入3、3、平衡因子那些事3、3、1、平衡因子-2/2下的简单情况3、3、2、平衡因子-2/2下的…

tkinter拖入txt文本并显示

tkinter拖入txt文本并显示 效果代码 效果 代码 import tkinter as tk from tkinter import scrolledtext from tkinterdnd2 import DND_FILES, TkinterDnDdef drop(event):file_path event.data.strip({})if file_path.endswith(.txt):with open(file_path, r, encodingutf-8…

K8s 的最后一片拼图:dbPaaS

K8s 的发展使得私有云跟公共云之间的技术差不断的缩小&#xff0c;不管是在私有云还是公共云&#xff0c;大家今天都在基于 K8s 去开发 PaaS 系统。而 K8s 作为构建 PaaS 的基础&#xff0c;其全景图里还缺最后一块“拼图”——dbPaaS。作为一个云数据库行业干了十几年的资深从…

urfread刷算法|构建一棵树

大意 示例标签串&#xff1a; 处理结果&#xff1a; 题目1 根据标签串创建树 需求 需求&#xff1a;给出一个字符串&#xff0c;将这个字符串转换为一棵树。 字符串可以在代码里见到&#xff0c;是以#开头&#xff0c;按照\分割的字符串。 你需要将这个字符串&#xff0…

【鸿蒙学习笔记】@Prop装饰器:父子单向同步

官方文档&#xff1a;Prop装饰器&#xff1a;父子单向同步 [Q&A] Prop装饰器作用 Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的&#xff0c;但是变化不会同步回其父组件。 [Q&A] Prop装饰器特点 &#xff11;・Prop装饰器不能在Entry装饰的…

Android Studio上传新项目到Gitee

一、在Gitee上创建仓库 首先需要再Gitee上创建仓库 1、在Gitee中新建仓库 2、输入仓库信息 3、生成仓库地址 创建成功会生成一个仓库地址&#xff0c;格式如下&#xff1a; https://gitee.com/test/compose_mvi_demo.git二、Android Studio 上传项目到Gitee 1、在Android …

CXL-GPU: 全球首款实现百ns以内的低延迟CXL解决方案

数据中心在追求更高性能和更低总拥有成本&#xff08;TCO&#xff09;的过程中面临三大主要内存挑战。首先&#xff0c;当前服务器内存层次结构存在局限性。直接连接的DRAM与固态硬盘&#xff08;SSD&#xff09;存储之间存在三个数量级的延迟差异。当处理器直接连接的内存容量…

Hive测试

1、数据仓库的体系结构包含四个层次&#xff0c;分别是&#xff1a; 数据源 数据存储和管理 数据服务 数据应用 2、Hive提供了类似关系数据库SQL的查询语言&#xff1a; HiveQL 3、Hive某种程度上可以看作 用户编程接口&#xff0c;本身不存储和处理数据&#xff0c;存储数据依…

CesiumJS【Basic】- #057 绘制纹理填充多边形(Primitive方式)

文章目录 绘制纹理填充多边形(Primitive方式)1 目标2 代码2.1 main.ts绘制纹理填充多边形(Primitive方式) 1 目标 使用Primitive方式绘制绘制纹理填充多边形 2 代码 2.1 main.ts import * as Cesium from &

CDC模型

引言 聚类是一种强大的机器学习方法&#xff0c;用于根据特征空间中元素的接近程度发现相似的模式。它广泛用于计算机科学、生物科学、地球科学和经济学。尽管已经开发了最先进的基于分区和基于连接的聚类方法&#xff0c;但数据中的弱连接性和异构密度阻碍了其有效性。在这项…

职业性格测试,企业HR招聘测评最常用人才测评

关于求职测评&#xff0c;招聘中用到的人才测评&#xff0c;你们对这个话题又知道多少呢&#xff1f;为什么我会以90后为分界线&#xff0c;首先90后正是接触计算机最早的一代&#xff0c;因为小编是90后&#xff0c;更了解这个年龄段都在做什么&#xff0c;可以说90后见证了互…