牛客小白月赛57

简介: 笔记

A 最大面积


题目

30.png


输入

31.png


输出

32.png



示例1


输入


2 2 3 2


输出


4


代码

void solve() {
    int a, b, c, d; cin >> a >> b >> c >> d;
    cout << min(a, c) * min(b, d) << endl;
}


B 种树


题目

33.png


输入

34.png


输出

35.png


示例1


输入


7

0111110


输出


2


思路

注意题目说的:“一个地方可以种多棵树。”


左侧有 0 可以由右侧某个1 向左种树


右侧有 0可以由左侧某个 1 向右种树


即:字符串首尾两位 0的个数,决定了种的次数。


代码

void solve() {
    int n; cin >> n;
    string s; cin >> s;
    int res = 0;
    if (s[0] == '0') res++;
    if (s.back() == '0') res++;
    cout << res << endl;
}


C 奇怪的电梯


题目


36.png

输入


37.png

输出

38.png


示例1


输入


5

10 3 2 7

10 7 1 4

10 4 2 9

10 11 1 10

9 3 7 2


输出


YES

NO

YES

NO

YES


思路

事先声明:代码很丑,但思路非常简单!!!


题目问能否从( a − > b ),那很容易第一想法就是分情况( a > b , b > a , a = = b ) (a>b,b>a,a==b)(a>b,b>a,a==b)

39.png

a==b:yes


b>a:(如上图所示)


这里需要继续分情况,在此只考虑yes的情况

b−a>k:a − > b

n−b>k:a − > n − > b

a−1>k:a − > 1 − > b

n−a>k&&b−1>k:a − > n − > 1 − > b

a > b a>ba>b:同上思路


以上情况已经列明,具体的逻辑也应该非常清晰了,不在叙述每一步之间的大小关系了(自己想。


代码

void solve() {
    int n, k, a, b; cin >> n >> k >> a >> b;
    if (a == b) { puts("YES"); return ; }
    if (a > b) {
        if (n - a > k || a - b > k || b - 1 > k) { puts("YES"); return ; }
        else if (a - 1 > k && n - b > k) { puts("YES"); return ; }
        else { puts("NO"); return ; }
    } else {
        if (a - 1 > k || b - a > k || n - b > k) { puts("YES"); return ; }
        else if (n - a > k && b - 1 > k) { puts("YES"); return ; }
        else { puts("NO"); return ; }
    }
}


D 最大gcd


题目

40.png


输入

41.png


输出

42.png


示例1


输入


3

1 2 2


输出


2


思路

这题一眼n 2

2

暴力结束。。。T的飞起


考虑题目范围n≤1e6,并且每个数的大小a[i]≤1e6。


我们可以从原先找每两个数的gcd 取最大,转为找出每个数的约数,这样最大存在的约数并且个数大于等于2 ,那么就是答案。


我们考虑 nlogn的算法来实现,又已知 nlogn 能打出 1 ~ n 范围内的所有约数。


大概思路就是枚举每个数 i 的倍数,那么 i ∗ j 的约数就有 i。和线性筛的思路有点相似,代码大概长这样:


// 求 1 ~ n 的约数
for (int i = 1; i <= n; i++) 
  for (int j = 1; j <= n / i; j++) 
    a[i * j].push_back(i);


不过这题还需要有一个特判(由于我的实现方式导致的),需要对重复的数也计入答案的贡献。即代码中的:if (a[x] == 2) res = max(res, x);

因为if (a[i * j]) c[i]++;,这行代码未考虑重数的情况。


代码

int a[N], c[N];
void solve() {
    int n; scanf("%d", &n);
    int res = -1;
    for (int i = 1; i <= n; i++) { int x; cin >> x; a[x]++; if (a[x] == 2) res = max(res, x); }
    for (int i = 1; i <= N; i++)
        for (int j = 1; j <= N / i; j++)
            if (a[i * j]) c[i]++;
    for (int i = 1; i < N; i++) if (c[i] >= 2) res = max(res, i);
    cout << res << endl;
}


E 一道难题


题目


43.png

输入


44.png

输出

45.png


示例1


输入


2001


输出


3


说明

1 − 2001 1−20011−2001 中,满足条件的数有:111 , 1110 , 1111 111,1110,1111111,1110,1111。


思路

题目输入的是十进制的数,但是题目要求的是由 0 00 或 1 11 组成的。


所以可以发现,满足题目的条件的十进制数,实际上与相同位数的二进制数对应。


那么可以求出不超过 n nn 的最大的二进制形式,应该对应的十进制数值。


对于每一个数,都当成一个二进制数看。然后在暴力枚举,判断符合条件即可。


代码

void solve() {
    string s; cin >> s;
    int n = 0;
    bool o = false;
    for (int i = 0; i < s.sz; i++) {
        if (o) { n += (1ll << (s.sz - i - 1)); continue; }
        if (s[i] > '1') n += (1ll << (s.sz - i - 1)), o = true;
        if (s[i] == '1') n += (1ll << (s.sz - i - 1));
    }
    auto check = [=](int x){
        int cnt = 0;
        while (x) {
            if (x & 1) cnt++;
            else cnt = 0;
            if (cnt == 3) return true; 
            x >>= 1;
        }
        return false;
    };
    int res = 0;
    for (int i = 1; i <= n; i++) {
        if (check(i)) res++;
    }
    cout << res << endl;
}


F 序列操作


相关文章
|
8月前
|
人工智能 数据可视化 数据中心
2025 FinOps 状况报告解读
要任务,取代了工作负载优化。企业对 FinOps 的需求从单纯的技术优化转向更广泛的 IT 成本管理,强调自动化和工具投资。此外,FinOps 正与 ITFM、ITAM 和 TBM 深度融合,但 ESG 整合进展缓慢。AI 投资方面,金融行业更倾向于私有云和数据中心,而大多数企业则优先选择公有云。总体而言,FinOps 已成为企业 IT 成本管理的核心,未来将更加注重成本透明化和业务价值量化。
253 14
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
281 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
Cloud Native 安全 Devops
核心系统转型问题之数字化韧性的定义如何解决
核心系统转型问题之数字化韧性的定义如何解决
|
XML Java 数据格式
深度解析 Spring 源码:揭秘 BeanFactory 之谜
深度解析 Spring 源码:揭秘 BeanFactory 之谜
163 1
|
存储 NoSQL 关系型数据库
认识常见的一些数据库分类
数据库是用于存储、检索、管理和发送数据的系统。根据数据模型的不同,数据库可以分为多种类型。
1265 4
|
存储 编译器 C++
【C++】String -- 详解(下)
【C++】String -- 详解(下)
【分享】宜搭子表单点击新增自动展开最后一项,折叠前面所有项.
宜搭子表单点击新增自动展开最后一项,折叠前面所有项. by 页一
899 0
【分享】宜搭子表单点击新增自动展开最后一项,折叠前面所有项.
|
机器学习/深度学习 存储 算法
【机器学习】支持向量机 SVM(非常详细)
SVM 想要的就是找到各类样本点到超平面的距离最远,也就是找到最大间隔超平面。
【机器学习】支持向量机 SVM(非常详细)
|
API 网络安全 开发工具
别无分号只此一家,Python3接入支付宝身份认证接口( alipay.user.certify)体系(2023年最新攻略)
目前国内身份认证体系做的比较不错的大抵就是支付宝和微信两家了,支付宝的身份验证基于支付宝app的实人认证能力,采用多因子认证技术快速得出认证结果,对于多因子认证技术不太了解的朋友可移步:[别让你的服务器(vps)沦为肉鸡(ssh暴力破解),密钥验证、双向因子登录值得拥有](https://v3u.cn/a_id_172)进行了解。其作用主要是为了解决线上实人开户、账号实名认证、账号实人登录等场景中个人身份的识别问题,比如你某一天突然心血来潮想当一把韭菜炒炒股,又不想去人多眼杂的营业厅,所以利用app远程开户,开户的过程中,你怎么证明“你是你本人”的问题。
别无分号只此一家,Python3接入支付宝身份认证接口( alipay.user.certify)体系(2023年最新攻略)