Codeforces Round 946 (Div.3)

news2025/1/8 12:19:15

C o d e f o r c e s   R o u n d   946   ( D i v . 3 ) \Huge{Codeforces~Round~946~(Div.3)} Codeforces Round 946 (Div.3)

题目链接:Codeforces Round 946 (Div. 3)

文章目录

  • Problems A. Phone Desktop
    • 题意
    • 思路
    • 标程
  • Problems B. Symmetric Encoding
    • 题意
    • 思路
    • 标程
  • Problems C. Beautiful Triple Pairs
    • 题意
    • 思路
    • 标程
  • Problems D. Ingenuity-2
    • 题意
    • 思路
    • 标程
  • Problems E. Money Buys Happiness
    • 题意
    • 思路
    • 标程

Problems A. Phone Desktop

题意

有无限个 3 × 5 3\times 5 3×5的二维方阵,然后给出x个 1 × 1 1 \times 1 1×1的方块和y个 2 × 2 2\times 2 2×2的方块,要求所有方块全部放在方阵里,求最少需要多少个方阵。

思路

每个方阵能放两个 2 × 2 2\times 2 2×2的方块,或者15个 1 × 1 1\times 1 1×1的方块,然后根据 2 × 2 2\times 2 2×2个数,求出至少需要多少个方阵,然后再根据 1 × 1 1\times 1 1×1方块个数判断需不需要加方阵。

标程

void Solved() {
    int x, y; cin >> x >> y;
    int sum1 = (y + 1) / 2;
    int sum2 = sum1 * 7;
    if(y & 1) sum2 += 4;

    sum2 -= x;
    if(sum2 < 0) {
        sum2 *= -1;
        sum1 += (sum2 + 14) / 15;
    }
    
    cout << sum1 << endl;
}

Problems B. Symmetric Encoding

题意

题目给出一个字符串 s s s,然后要求求解其加密前的字符串。

加密过程为:

  • 先将 s s s去重排序得到 s 2 s2 s2
  • 然后对 s 2 s2 s2进行首尾映射:
  • img
  • 最后根据映射改变 s s s

思路

根据加密过程进行模拟。

字符串是否加密,其去重排序的结果是不变的,然后用 m a p map map记录字母映射,然后对加密字符串解密即可。

标程

void Solved() {
    int n; cin >> n;
    string s; cin >> s;
    string ss = s, s1;

    sort(ss.begin(), ss.end());

    s1 = s1 + ss[0];
    for(int i = 1; i < n; i ++ ) {
        if(s1.back() != ss[i]) s1 = s1 + ss[i];
    }

    map<char, char> mp;
    int len = s1.size();
    for(int i = 0; i < len; i ++ ) {
        mp[s1[i]] = s1[len - i - 1];
        mp[s1[len - 1 - i]] = s1[i];
    }
    for(int i = 0; i < n; i ++ ) {
        cout << mp[s[i]];
    } cout << endl;
}

Problems C. Beautiful Triple Pairs

题意

题目给出一串长度为 n n n的数列 a a a,如果任意三元组 j ( 1 ≤ j ≤ n − 2 ) [ a j , a j + 1 , a j + 2 ] j (1 \le j \le n - 2) [a_j, a_{j + 1}, a_{j + 2}] j(1jn2)[aj,aj+1,aj+2]能够与其他三元组符合:任意一个位置不同其他两个位置相同,那么这个三元组就是美丽的,求其中美丽三元对的个数。

  • 3 ≤ n ≤ 2 ⋅ 1 0 5 3 \le n \le 2 \cdot 10^5 3n2105

思路

这道题的数据范围比较大,我们可以发现,对于任意三元组,如果我们需要找出所有三元组中有多少满足要求,其结果是:所有与它有至少两个相等的三元组个数,减去所有与它全部相等的三元组个数。

因此我们可以遍历一遍,然后用map存一下所有三元组中的两个,一共需要用三个map,然后再存一下每个三元组本身的个数,然后遍历一遍求解即可。

需要注意的是,我们求解过程中每个美丽三元组都加了两次,所以需要最后结果除以 2 2 2

标程

#define int long long 
#define PII pair<int, int>
#define fi first 
#define se second

void Solved() {
    int n; cin >> n;
    vector<int> a(n + 1);

    for(int i = 1; i <= n; i ++ ) {
        cin >> a[i];
    }
    map<PII, int> mp1, mp2, mp3;
    map<tuple<int, int, int>, int> mp;
    for(int i = 1; i <= n - 2; i ++ ) {
        mp[{a[i], a[i + 1], a[i + 2]}] ++;
        mp1[{a[i + 1], a[i + 2]}] ++;
        mp2[{a[i], a[i + 2]}] ++;
        mp3[{a[i], a[i + 1]}] ++;
    }
    int res = 0;
    for(int i = 1; i <= n - 2; i ++ ) {
        res += mp1[{a[i + 1], a[i + 2]}] - mp[{a[i], a[i + 1], a[i + 2]}];
        res += mp2[{a[i], a[i + 2]}] - mp[{a[i], a[i + 1], a[i + 2]}];
        res += mp3[{a[i], a[i + 1]}] - mp[{a[i], a[i + 1], a[i + 2]}];
    }
    
    cout << res / 2 << endl;
}

Problems D. Ingenuity-2

题意

题目给出上下左右四种操作,分别用“WESN"对应。现在有一个直升机H和漫游车 R R R,然后给出一串操作,要求每次选择直升机移动,或者漫游车移动,要求最后到达同意位置,题目要求输出一种具体解决方案,并且直升机或者漫游车都至少移动一次

思路

本题是一道模拟,我们考虑如下情况:一般地,如果讲所有操作全用一种机器移动,设最后坐标为 ( x , y ) (x,y) (x,y),若 x x x y y y为奇数,则题目无解,否则可以将两个机器都移动到 ( x 2 , y 2 ) (\frac{x}{2},\frac{y}{2}) (2x,2y)位置。

实现方法就是:每个机器都移动每种操作数的一半。

唯一需要注意的就是:

  • 不存在解决方案的情况:除了上述的横纵坐标出现奇数,还有就是当 n n n 2 2 2,且两个操作不一样的情况。
  • 当上下左右各出现一次的时候,需要特判,因为题目要求每个机器都至少移动一次。

标程

void Solved() {
    int n; cin >> n;
    string s; cin >> s;

    int x = 0, y = 0;
    map<char, int> mp;
    for(int i = 0; i < n; i ++ ) {
        if(s[i] == 'N') y ++, mp['N'] ++;
        if(s[i] == 'S') y --, mp['S'] ++;
        if(s[i] == 'W') x --, mp['W'] ++;
        if(s[i] == 'E') x ++, mp['E'] ++;
    }
    if((x & 1) || (y & 1) || (n == 2 && s[0] != s[1])) {
        cout << "NO\n"; return;
    }
    string ss = "WESN";
    int t = 0;
    for(auto i : ss) if(mp[i]) t ++;

    if(t == 4 && n == 4) {//判断EWSN的情况
        for(int i = 0; i < 4; i ++ ) {
            if(s[i] == 'W' || s[i] == 'E') cout << 'H';
            if(s[i] == 'S' || s[i] == 'N') cout << 'R';
        }
        cout << endl;
        return;
    }
    
    map<char, int> mp2;
    for(int i = 0; i < n; i ++ ) {
        if(mp2[s[i]] < mp[s[i]] / 2) cout << 'R', mp2[s[i]]++;
        else cout << 'H';
    }
    cout << endl;
}

Problems E. Money Buys Happiness

题意

作者每个月的工资为 k k k,每个月有购买幸福的机会,但是本月工资不能用来购买本月幸福,工资可以累计。每个月的幸福有价值和幸福度,作者希望 n n n个月过后自己的幸福度最多,求幸福度最多为多少?

数据范围:

  • 0 ≤ c i ≤ 1 0 8 , 1 ≤ h i ≤ 1 0 3 0 \le c_i \le 10^8,1 \le h_i \le 10^3 0ci108,1hi103 c i c_i ci表示幸福价值, h i h_i hi表示幸福度。
  • ∑ i h i ≤ 1 0 5 \sum_i h_i\le 10^5 ihi105
  • 1 ≤ n ≤ 50 , 1 ≤ k ≤ 1 0 8 1 \le n \le 50, 1 \le k \le 10^8 1n50,1k108

思路

跟据题目来看,这道题应该是一道 d p dp dp,但是状态转移方程不太好推。

容易注意到幸福度之和比较小,同时 n n n的数据范围也比较小,并且 O ( n × ∑ i h i ) O(n \times \sum_i h_i) O(n×ihi)的时间复杂度也不会超时。

通过观察发现,当幸福度最多时,满足幸福度最多,所用价值最少。因此我们考虑讲幸福度看作背包问题中的价值,幸福价值看作重量,然后把问题转化为求解幸福度最多,并且所用价值最少的情况。那么这道题就转化为了一道01背包问题。

标程

#define int long long 
const int INF = 0x7fffffff;

void Solved() { 
    int n, k; cin >> n >> k;
    vector<PII> a(n + 1);
    int sum = 0;

    for(int i = 1; i <= n; i ++ ) {
        int x, y; cin >> x >> y;
        a[i] = {x, y};
        sum += y;
    }
    int res = 0;
    vector<int> f(sum + 1, INF * 10000);//数据范围会爆int
    f[0] = 0;

    for(int i = 1; i <= n; i ++ ) {
        for(int j = sum - a[i].se; j >= 0; j -- ) {
            //当前工资需要满足能够买本月幸福和枚举的幸福,否则无法转移
            if((i - 1) * k >= a[i].fi + f[j]) {
                f[j + a[i].se] = min(f[j + a[i].se], f[j] + a[i].fi);
            }
        }
    }
    
    for(int i = sum; i; i -- ) {
        if(f[i] != INF * 10000) {
            res = i; break;
        }
    }
    cout << res << endl;
}

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

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

相关文章

Linux:IPC - System V

Linux&#xff1a;IPC - System V 共享内存 shm创建共享内存shmgetshmctlftok 挂接共享内存shmatshmdt shm特性 消息队列 msgmsggetmsgctlmsgsndmsgrcv 信号量 semSystem V 管理机制 System V IPC 是Linux系统中一种重要的进程间通信机制&#xff0c;它主要包括共享内存 shm&am…

centos下给es7.12.1设置密码

安装可参考&#xff1a; centos7下安装elasticsearch7.8.1并配置远程连接_在一台服务器centos7上安装和配置elasticsearch。-CSDN博客 1、先停掉es进程 2、设置输入密码后访问配置 cd /home/soft/elasticsearch-7.12.1/config vim elasticsearch.yml 3、启动es服务 cd /home/…

ARM鲲鹏920-oe2309-caffe

参考链接:Caffe | Installation 安装依赖包 dnf install dnf update dnf install leveldb-devel snappy-devel opencv.aarch64 boost-devel hdf5-devel gflags-devel glog-devel lmdb-devel openblas.aarch64 dnf install git wget tar gcc-g unzip automake libtool autoco…

【SQL学习进阶】从入门到高级应用(一)

文章目录 MySQL命令行基本命令数据库表的概述初始化测试数据熟悉测试数据 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01; &#x1f49d;希望您在这里可以感受到一份轻松愉快的氛围&#x…

keithely 2401 低压源表

Keithley 2401 低压源表提供精密电压和电流源以及测量功能&#xff08;1V - 20V 和 10pA - 1A&#xff09;。它既是高度稳定的直流电源&#xff0c;也是真正的仪器级 5 位万用表。电源特性包括低噪声、精度和回读。万用表功能包括高重复性和低噪声。结果是紧凑型单通道直流参数…

如何加密设计图纸|文件加密软件推荐榜单(推荐收藏)

在现代企业中&#xff0c;特别是涉及高科技研发、工程设计和制造业的公司&#xff0c;保护敏感图纸和技术资料免受信息泄露是至关重要的。图纸加密软件作为一种有效的防护手段&#xff0c;能够为企业提供全方位的安全保障。以下是几款主流的图纸加密软件以及其优势&#xff0c;…

Python零基础一天丝滑入门教程(非常详细)

目录 第1章 初识python 第1节 python介绍 1.为什么要学习Python&#xff1f; 2.python排名 3.python起源 4.python 的设计目标 第2节 软件安装 第2章 快速上手&#xff1a;基础知识 第1节 Python3 基础语法 Python 变量 字面量 数据类型转换 Python3 注释 数据类…

2024年【西式面点师(中级)】新版试题及西式面点师(中级)考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【西式面点师&#xff08;中级&#xff09;】新版试题及西式面点师&#xff08;中级&#xff09;考试试卷&#xff0c;包含西式面点师&#xff08;中级&#xff09;新版试题答案和解析及西式面点师&#xff08;…

HCIP的学习(25)

VLAN间通讯技术 使用多臂路由的方式 ​ 路由器的物理接口默认是不识别802.1Q标签的&#xff0c;所以&#xff0c;交换机连接路由器的接口在发送数据帧时&#xff0c;应该将标签剥离。----一般常使用Access接口配置。 单臂路由 ​ 所谓的单臂路由&#xff0c;实际上试讲路由器…

13个PyTorch深度学习案例简介

本文整理《PyTorch深度学习与企业级项目实战》中项目案例所使用的模型&#xff0c;方便大家在学习、研究深度学习过程中做训练使用&#xff0c;这些案例也适合作为课程论文、毕业论文的素材&#xff0c;值得收藏和推荐。 第6章 迁移学习花朵识别项目实战 花朵数据集 ResNet…

python--pycharm中将venv删除后怎么办

在终端中输入以下命令来创建一个新的虚拟环境&#xff08;可选&#xff09;&#xff1a; python -m venv venv 激活虚拟环境&#xff1a; Windows: .\venv\Scripts\activate选择自己项目的虚拟环境

WebGL技术在教育培训中的应用

WebGL技术在教育培训中的应用非常广泛&#xff0c;通过其强大的三维图形处理能力&#xff0c;能够为教育培训提供更加生动、互动和沉浸式的学习体验。以下是WebGL在教育培训中的几个主要应用及其具体实现。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xf…

Tomcat端口配置

Tomcat是开源免费的服务器&#xff0c;其默认的端口为8080&#xff0c;本文讲述一下如何配置端口。 最后在浏览器中输入localhost:8888即可打开Tomcat界面

从0开始写一个环境保护网站的第3天(JAVAWEB)

1.目标 实现首页的环境保护原因的查询&#xff0c;和底部友情连接部分 2.实现 2.1建立数据库表格&#xff08;这里数据全是百度查询&#xff09; 环境保护原因表&#xff1a; 友情连接表&#xff1a;&#xff08;数据来源https://zhuanlan.zhihu.com/p/696243646&#xff0…

揭秘python模块导入的“隐身术”:如何控制模块代码的执行?

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;两个下划线的奥秘 二、案例展示&#xff1a;模块导入与代码执行 1. 导…

前端Vue小兔鲜儿电商项目实战Day01

一、项目介绍 1. 项目技术栈 2. 项目规模 3. 项目亮点 4. 课程安排 5. 适合人群 二、Vue3组合式API体验 1. 通过一个Counter案例体验Vue3新引入的组合式API ①Vue2的代码 <template><button click"addCount"> {{ count }}</button> </templ…

多模态中的模态有哪些

“多模态”这个名字中的“模态”&#xff08;modality&#xff09;&#xff0c;指的是不同的数据类型或信息源。在多模态大模型中&#xff0c;常见的模态包括&#xff1a; 文本模态&#xff1a; 包括自然语言文本、语音识别文本等。 图像模态&#xff1a; 指图像数据&#xff…

苹果CMS:采集到数据但是没有同步到数据库

我们在采集成功之后&#xff0c;发现一个问题&#xff0c;数据库没有数据&#xff0c;为什么会这样呢&#xff1f;是因为我们没有做类别绑定&#xff0c;那我们今天来介绍下如何对采集数据进行类别绑定&#xff1f; 1、进入管理后台【基础】-【分类管理】 进入到该页面我们先…

Linux文本文件管理003

★排序、去重、统计★ 1&#xff09;排序 sort -n按照数值排序 -r降序排列 2&#xff09;去重 uniq 过滤相邻、重复的行 -c 对重复行计数 3&#xff09;统计 wc 统计文件中的字节数、单词数、行数 -l 显示行数 今天通过使用grep、awk、cut指令和上面几个选项提取文本文件…

python爬虫之pandas库——数据清洗

安装pandas库 pip install pandas pandas库操作文件 已知在本地桌面有一名为Python开发岗位的csv文件(如果是excel文件可以做简单修改即可&#xff0c;道理是通用的) 打开文件&#xff1a; 打开文件并查看文件内容 from pandas import DataFrame import pandas as pd data_c…