【CF】Day9——Codeforces Round 953 (Div. 2) BCD

news2025/3/18 5:07:48

B. New Bakery

题目:

思路:

被标签害了,用什么二分(

很简单的思维题,首先如果a >= b,那么全选a就行了,还搞啥活动

否则就选 b - a 天来搞活动,为什么?

首先如果我们要搞活动,而且要最大利益,那么肯定要满足 b - k >= a,即每一天的利润都不能小于a,不然的话我搞啥活动

所以变换一下就是 b - a >= k,可知最大k是 b - a ,然后再写出理论公式即可(自己写X)

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"

int n, a, b;

void solve()
{
	cin >> n >> a >> b;
	int k = min(n, b - a), ans = 0;
	if (a >= b)
		ans = n * a;
	else 
	{
		k = min(n, b - a);
		ans += (2 * b + 1 - k) * k / 2 + (n - k) * a;
	}
	cout << ans << endl;
}

signed main()
{
    cin.tie(0)->sync_with_stdio(false);
    int t = 1;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}

C. Manhattan Permutations

题目:

思路:

这是一道比较直觉的思维题目

首先题目说要构造出一个排列使得其曼哈顿值为所需的k,那首先我们肯定要判断能不能构造出

显然,使得排列为 n n-1 n-2 ... 3 2 1这种形式存在最大曼哈顿值,同时还能观察到,如果要构造只能构造出偶数曼哈顿值,为什么呢?其实自己举例证明就能发现(我就是这样发现的)

那么现在就考虑如何构造出这个排列呢?

我们对于任意一个x和y,如果交换其位置,那么奉献肯定是 2 * |x - y|,也就是说可以构造出任何偶数,那我们考虑直接模拟,双指针来选择合适的x y,如果小于k,那么就加,否则就往内缩小,由于每次的奉献其实是对称的,所以维护一边的指针即可,特别的,这一题肯定是要从大到小枚举

(注意数据,因为数据不是特别大,所以O(n)的做法可以接受,我一开始就是想太难,在考虑如何优化,纯属是杞人忧天了)

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"

void solve()
{
    int n, k;
    cin >> n >> k;
    int maxn = 0;
    vector<int> a(n+1,0);
    for (int i = 1; i <= n; i++)
    {
        maxn += abs((n - i + 1) - i);
        a[i] = i;
    }
    if (k % 2 || k > maxn)
    {
        no;
        return;
    }
    yes;
    int L = 1, R = n;
    while (k && L <= R)
    {
        while (2ll * (a[R] - a[L]) > k)
            R--;
        k -= 2ll * (a[R] - a[L]);
        swap(a[L], a[R]);
        L++, R--;
    }
    for (int i = 1; i <= n; i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;
}

signed main()
{
    cin.tie(0)->sync_with_stdio(false);
    int t = 1;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}

D. Elections

题目:

思路:

考验直觉和眼力的思维题

首先我们要看清楚!这个人数是分给下标最小的,也就是下标最前的,那么显然

只要第一个人不去除,别的票都会给第一个!

也就是说对于第 i 个人,如果不将前 i - 1 个人删去的话,那么第 i 个人的票数是不会增加的

到此,关键点就没了,接下来就是模拟了

首先我们要确定一开始谁都不删除的情况下谁是最大的,这样就知道谁是不需要删除的了,也就是比较 a[0] + c 和 max(a1 ~ an),那么特判就到此结束了,接下来乖乖模拟即可

我们可以用sum来储存有多少人可以投给第i人,如果a[i] + sum >= maxn(其中maxn是整个数列的最大值),那么就输出 i 个人即可,因为我们最少都要删掉 i 个人,如果还是小于最大值的话,我们只需要多删去那个最大值就行了,也就是要删 i + 1 个,同时我们根本不需要考虑最大值相等的情况,因为对于第 i 个,前面的都删完了,就算有相等的,他也是第一个

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"

void solve()
{
    int n, c;
    cin >> n >> c;
    vector<int> a(n);
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    if (n == 1)
    {
        cout << "0\n";
        return;
    }
    int maxn = *max_element(a.begin(), a.end());
    int maxN = max(maxn, a[0] + c);
    int first = (maxN == a[0] + c) ? 0 : (find(a.begin(),a.end(),maxn) - a.begin());
    int sumc = c;
    for (int i = 0; i < n;i++)
    {
        int ans = 0;
        if (i == first)
        {
            ans = 0;
        }
        else if(sumc + a[i] >= maxn)
        {
            ans = i;
        }
        else
        {
            ans = i + 1;
        }
        cout << ans << " ";
        sumc += a[i];
    }
    cout << endl;
}

signed main()
{
    cin.tie(0)->sync_with_stdio(false);
    int t = 1;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}

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

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

相关文章

harmonyOS NEXT开发与前端开发深度对比分析

文章目录 1. 技术体系概览1.1 技术栈对比1.2 生态对比 2. 开发范式比较2.1 鸿蒙开发范式2.2 前端开发范式 3. 框架特性对比3.1 鸿蒙 Next 框架特性3.2 前端框架特性 4. 性能优化对比4.1 鸿蒙性能优化4.2 前端性能优化 5. 开发工具对比5.1 鸿蒙开发工具5.2 前端开发工具 6. 学习…

Unity小框架之单例模式基类

单例模式&#xff08;Singleton Pattern&#xff09;是一种常用的创建型设计模式&#xff0c;其核心目标是确保一个类只有一个实例&#xff0c;并提供一个全局访问点。它常用于需要控制资源访问、共享配置或管理全局状态的场景&#xff08;如数据库连接池、日志管理器、应用配置…

cesium 实现万级管网数据渲染,及pickImageryLayerFeatures原生方法改写

需求背景解决效果getFeatureInfo 需求背景 在用 geoserver 渲染图层时&#xff0c;会自动触发 GetFeatureInfo &#xff0c;与服务器通信&#xff0c;在万级海量数据渲染下&#xff0c;这个性能消耗就可以感受到了 需要考虑的点&#xff1a; 1.通过enablePickFeatures&#xf…

基于金融产品深度学习推荐算法详解【附源码】

深度学习算法说明 1、简介 神经网络协同过滤模型(NCF) 为了解决启发式推荐算法的问题&#xff0c;基于神经网络的协同过滤算法诞生了&#xff0c;神经网络的协同过滤算法可以 通过将用户和物品的特征向量作为输入&#xff0c;来预测用户对新物品的评分&#xff0c;从而解决…

LVS + Keepalived 高可用集群

一、LVSKeepalived 原理 1.1.LVS 负载均衡原理 LVS&#xff08;Linux Virtual Server&#xff09;是一种基于 Linux 内核的负载均衡技术&#xff0c;它通过 IPVS&#xff08;IP Virtual Server&#xff09;模块来实现。LVS 可以将客户端的请求分发到多个后端服务器上&#xf…

PHP与数据库连接常见问题及解决办法

PHP与数据库连接常见问题及解决办法 在现代Web开发中&#xff0c;PHP与数据库的连接是不可或缺的一部分。无论是构建动态网站、内容管理系统&#xff08;CMS&#xff09;还是电子商务平台&#xff0c;PHP与数据库的交互都是核心功能之一。然而&#xff0c;在实际开发过程中&am…

HarmonyOS-应用程序框架基础

应用程序框架与应用模型的区别 应用框架可以看做是应用模型的一种实现方式&#xff0c;开发人员可以用应用模型来描述应用程序的结构和行为的描述&#xff0c;然后使用应用程序框架来实现这些描述。 应用模型 应用模型是一个应用程序的模型&#xff0c;它是一种抽象的描述&a…

使用 Doris 和 LakeSoul

作为一种全新的开放式的数据管理架构&#xff0c;湖仓一体&#xff08;Data Lakehouse&#xff09;融合了数据仓库的高性能、实时性以及数据湖的低成本、灵活性等优势&#xff0c;帮助用户更加便捷地满足各种数据处理分析的需求&#xff0c;在企业的大数据体系中已经得到越来越…

【C语言】函数和数组实践与应用:开发简单的扫雷游戏

【C语言】函数和数组实践与应用&#xff1a;开发简单的扫雷游戏 1.扫雷游戏分析和设计1.1扫雷游戏的功能说明&#xff08;游戏规则&#xff09;1.2游戏的分析与设计1.2.1游戏的分析1.2.2 文件结构设计 2. 代码实现2.1 game.h文件2.2 game.c文件2.3 test.c文件 3. 游戏运行效果4…

国内Mac,nimi安装homebrew完整过程

安装命令&#xff1a; 常规安装脚本&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 极速安装脚本&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.…

C++基础——从C语言快速入门

目录 输入输出 标准输出流 ( cout ) 标准输入流 ( cin ) 标准错误流 ( cerr ) 和标准日志流 ( clog ) 编程示例 基本变量类型 宽字符的用法 climits 如何使用 编程示例 注意事项 流程控制 条件语句 循环语句 跳转语句 函数 函数的基本结构 编程示例 函数的组成…

Windows远程桌面黑屏怎么办?

在使用Windows远程桌面连接另一台电脑时&#xff0c;用户经常会遇到Windows远程桌面黑屏的问题。那么&#xff0c;该如何有效地解决Windows远程桌面黑屏的问题呢&#xff1f;遇到远程桌面连接黑屏的问题时&#xff0c;可以通过在本地组策略编辑器中禁用WDDM图形显示驱动来解决。…

82.HarmonyOS NEXT 性能优化指南:从理论到实践

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT 性能优化指南&#xff1a;从理论到实践 文章目录 HarmonyOS NEXT 性能优化指南&#xff1a;从理论到实践1. 性能优化概述1.1 性能指…

python笔记2

变量&#xff1a;含义 一个容器&#xff0c;计算机当中的存储空间。 可以理解为一个用于标识或引用数据的名字或标签。 作用&#xff1a; 可以通过定义一个变量来给需要使用多次的数据命名&#xff0c;就像一个标签一样。下次需要使用这个数据时&#xff0c;只需要通过这个变…

深度学习 Deep Learning 第1章 深度学习简介

第1章 深度学习简介 概述 本章介绍人工智能&#xff08;AI&#xff09;和深度学习领域&#xff0c;讨论其历史发展、关键概念和应用。解释深度学习如何从早期的AI和机器学习方法演变而来&#xff0c;以及如何有效解决之前方法无法应对的挑战。 关键概念 1. 人工智能的演变 …

解决Windows版Redis无法远程连接的问题

&#x1f31f; 解决Windows版Redis无法远程连接的问题 在Windows系统下使用Redis时&#xff0c;很多用户会遇到无法远程连接的问题。尤其是在配置了Redis并尝试通过工具如RedisDesktopManager连接时&#xff0c;可能会报错“Cannot connect to ‘redisconnection’”。今天&am…

Qt C++ 常用压缩库推荐 快速压缩 解压缩数据

在Qt C中&#xff0c;如果你需要快速压缩和解压缩数据&#xff0c;可以使用以下几种库&#xff1a; 1. zlib 简介: zlib 是一个非常流行的压缩库&#xff0c;支持 DEFLATE 压缩算法。它被广泛用于各种应用程序中&#xff0c;包括Qt。 集成: Qt 本身已经集成了 zlib&#xff0…

架构师面试(十五):熔断设计

问题 某电商平台经常需要在大促运营活动中暂停评论、退款等业务&#xff0c;基于服务治理的设计理念&#xff0c;我们需要对该电商平台微服务系统的【服务熔断】进行设计&#xff0c;对此下面描述中说法正确的有哪几项呢&#xff1f; A. 服务管控系统管理着平台中所有服务之间…

Navicat如何查看密码

近期遇到需要将大部分已存储的navicat数据库转发给其他人&#xff0c;于是乎进行导出文件 奈何对方不用navicat&#xff0c;无法进行文件的导入从而导入链接 搜罗navicat的密码查看&#xff0c;大部分都为php代码解析 以下转载GitHub上看到的一个python代码解析的脚本 这里是对…

力扣143重排链表

143. 重排链表 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的…