牛客小白月赛95

2024-06-01 13:04
文章标签 牛客 95 小白月赛

本文主要是介绍牛客小白月赛95,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

c相助

题目描述

此题为E题的easy版,只有aia_iai​的数据范围不同。

给你一个 nnn 个正整数组成的数组 a ,你每次操作可以选择一对 (i,j)( i, j )(i,j),满足 1≤i<j≤n1 \leq i < j \leq n1≤i<j≤n,且 ai=aja_{i} = a_{j}ai​=aj​ ,将 { ai,ai+1,...,aj−1,aja_{i} , a_{i+1} , ... , a_{j-1} , a_{j}ai​,ai+1​,...,aj−1​,aj​ } 这段数删除,操作之后数组变为 { a1,a2,...,ai−1,aj+1,...,an−1,ana_{1},a_{2}, ..., a_{i-1},a_{j+1}, ...,a_{n-1},a_{n}a1​,a2​,...,ai−1​,aj+1​,...,an−1​,an​ }。文文想知道最少要做多少次操作,才能将数组变为空。

输入描述:

 

第一行一个正整数输入 nnn (1≤n≤5×105)( 1 \leq n \leq 5 \times 10^5 )(1≤n≤5×105)。

第二行依次输入 nnn 个正整数 a1,a2,...,an−1,ana_{1},a_{2},...,a_{n-1},a_{n}a1​,a2​,...,an−1​,an​,每个数之间以空格分开。(0≤ai≤1)( 0 \leq a_i \leq 1 )(0≤ai​≤1)

输出描述:

输出一行,代表最少的操作次数,如果无论如何都无法使数组为空就输出 -1。

示例1

输入

5
0 1 0 1 1

输出

2

说明

例如,n 为 5,数组为{0,1,0,1,1}\{0, 1, 0, 1, 1\}{0,1,0,1,1},第一次操作我们可以选择 i=1i = 1i=1,j=3j = 3j=3,把这一段删除后数组变为 {1,1}\{1, 1\}{1,1},第二次操作我们可以选择 i=1i = 1i=1,j=2j = 2j=2,把这一段删除后数组变为空,操作了两次。

示例2

输入

5
1 1 1 1 0

输出

-1

做法

答案只有-1,1,2三种。当头尾元素相同时一次就可以消除;若有一个下标满足a[i]=a[1],且a[i+1]=a[n],则需要消除两次。其他情况则无法完全消除。

#include<bits/stdc++.h>
using namespace std;
int n;
int a[500010];
int cnt0,cnt1;
int main(){scanf("%d",&n);for(int i=1;i<=n;i++) cin>>a[i];if(a[1]==a[n]){if(n==1)cout<<-1;else cout<<1;return 0;}for(int i=1;i<=n;i++){if(i==1||i+1==n) continue;if(a[1]==a[i]&&a[i+1]==a[n]){cout<<2;return 0;}}cout<<-1;
}

D异或炸弹(easy)

题目描述

此题为F题的easy版本,与F题仅有m的取值范围不同

给定一个n∗nn*nn∗n的矩阵,初始全是 ​0​0​0,

现在文文手上有 mmm 个炸弹,

对于每一个炸弹,都有自己的 爆炸中心(x,y) 和 爆炸半径 r.

当矩阵内某个位置与爆炸中心的 曼哈顿距离 小于等于 r 时,该位置就会收到爆炸的影响, 爆炸的影响就是给这个位置上的数异或 1.

文文给你这 mmm 个炸弹的爆炸位置和爆炸半径,你需要回答文文这个矩阵中 1 的个数

如果不明白 异或操作 和 曼哈顿距离,请看最后的提示

输入描述:

第一行给定两个正整数 n,mn ,mn,m, 分别表示矩阵大小和炸弹数量 

接下来mmm行,每行333个正整数其中第 iii 行的前2个正整数 xi,yix_i ,y_ixi​,yi​ 表示第 iii 个炸弹的爆炸中心最后一个正整数 rir_iri​ 表示第 iii 个炸弹的爆炸半径

1≤n≤3000,1≤m≤60001 \leq n \leq 3000, 1\leq m \leq 60001≤n≤3000,1≤m≤6000

1≤xi,yi≤n1 \leq x_i, y_i \leq n1≤xi​,yi​≤n

0≤ri≤60000 \leq r_i \leq 60000≤ri​≤6000

输出描述:

输出被轰炸后的矩阵中 111 的个数

示例1

输入

5 1
3 3 1

输出

5

说明

 

案例解释

0 0 0 0 0

0 0 1 0 0

0 1 1 1 0

0 0 1 0 0

0 0 0 0 0

共有5个1 

备注:

关于异或的运算

0 ^ 1 = 1

1 ^ 1 = 0

1 ^ 0 = 1

0 ^ 0 = 0

关于曼哈顿距离的运算如果两个点的坐标分别是(x1,y1),(x2,y2)(x1,y1),(x2,y2)(x1,y1),(x2,y2) 那么两个点的曼哈顿距离d=∣x1−x2∣+∣y1−y2∣d = |x1-x2|+|y1-y2|d=∣x1−x2∣+∣y1−y2∣.

做法

#include<bits/stdc++.h>
using namespace std;
int n,m;
int cf[3010][3010];
int main(){scanf("%d%d",&n,&m);while(m--){int x,y,r;scanf("%d%d%d",&x,&y,&r);for(int i=x-r;i<=x+r;i++){//枚举行数if(i<1||i>n) continue;int l=r-abs(x-i);//距离cf[i][max(1,y-l)]++;//差分(异或次数)cf[i][min(n+1,y+l+1)]--;}}int cnt=0;for(int i=1;i<=n;i++){int a=0;//还原数组的值for(int j=1;j<=n;j++){a+=cf[i][j];cnt+=a%2;//异或次数为奇数则最终值是1,偶数则是0}}cout<<cnt;
}

E相依

#include<bits/stdc++.h>
using namespace std;
int n;
int a[500010],dp[500010],mn[500010];
int main(){scanf("%d",&n);memset(mn,0x3f,sizeof(mn));for(int i=1;i<=n;i++) scanf("%d",&a[i]);for(int i=1;i<=n;i++){dp[i]=mn[a[i]]+1;mn[a[i]]=min(mn[a[i]],dp[i-1]);}if(dp[n]>=1e6) cout<<-1<<endl;else cout<<dp[n]<<endl;
}

这篇关于牛客小白月赛95的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1021088

相关文章

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

ISA-88与ISA-95标准简要介绍

ISA-88与ISA-95标准简要介绍 1. ISA-88标准 ISA-88是一个在制造过程自动化中广泛使用的国际标准,它主要定义和规范了制造和加工自动化应用中的工作流程模型和术语。该标准被划分为四个主要部分(Part 1至Part 4),每一部分都涵盖了不同方面的自动化生产需求。 Part 1 (ISA-88.01): 工作流程模型和术语 Part 1是ISA-88标准的基础,它定义

牛客《剑指Offer》 -- 数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路 特别注意负数的情况,出现负数,将其转化为正数然后求倒数。 class Solution {public:double Power(double base, int exponent) {double total = 1;bool flag = false

牛客网《剑指Offer》 二进制中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 负数用补码,其实就是求一个数据在计算机中是存储是怎么样子的。用位运算,就能很好实现。 class Solution {public:int NumberOf1(int n) {int count = 0;int flag = 1;while (flag != 0) {if ((n & f

牛客网《剑指Offer》 矩形覆盖

题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? class Solution {public:int rectCover(int number) {if(number==0) return 0;if(number==1) return 1;if(number==2) return 2;retu

牛客《剑指Offer》 变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路 根据 普通的跳台阶可以总结出 f(n) = f(n-1) + f(n-2) +f(n-3) + 。。。。+ f(1) +1 不妨设 f(0) = 1 , 则易得 class Solution {public:int jumpFloorII(int n