Codeforces Round #841 (Div. 2) and Divide by Zero 2022(A~E)

news2024/12/22 19:11:17

A. Joey Takes Money

给出一个序列a,每次操作可以选择两个数,将两个数分别改成与原数乘积相同的两个数,问最后得到的最大的数组和是多少。

思路:乘积一定,和最大一定是与1相乘。则整个数组的积与n - 1个1的和就是最大值。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
const int N = 1e5 + 5;
int t, n;
ll a[N];

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    std::cin >> t;
    while(t --) {
        std::cin >> n;
        ll sum = 1;
        for(int i = 1; i <= n; i ++) {
            std::cin >> a[i];
            sum *= a[i];
        }
        sum = (sum + (n - 1)) * 2022;
        std::cout << sum << '\n';
    }
    return 0;
}

B. Kill Demodogs

有n * n的矩阵,每个矩阵上有i * j个怪兽,每次可以向下移动一格或者向右移动一格,问从(1, 1)到(n, n)最多可以消灭多少怪兽。

思路:很显然,从中间走可以消灭最多的怪兽,这样就是两个数列求和,即通项为n * n的数列与n * (n + 1)的数列,化简得到的结果为(4 * n - 1) * (n + 1) * n * 337 % (1e9 + 7)。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
const int N = 1e5 + 5;
const int mod = 1e9 + 7;
int t;
ll n;

ll pmod(ll a, ll b) {
    ll res = 1;
    while(b) {
        if(b & 1) res = res * a % mod;
        b >>= 1;
        a = a * a % mod;
    }
    return res;
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    std::cin >> t;
    while(t --) {
        std::cin >> n;
        std::cout<< (4 * n - 1) * (n + 1) % mod * n % mod * pmod(6, mod - 2) % mod * 2022 % mod << '\n';
    }
    return 0;
}

C. Even Subarrays

给出一个数组a,求有多少子数组的异或和因数有偶数个。

思路:因数有奇数个的是完全平方数,所以我们枚举异或和为完全平方数的区间,逆向思维。注意时间复杂度,我们可以枚举数据范围内的完全平方数,mp记录一下即可。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
const int N = 4e5 + 5;
const int M = 2e6 + 5;
const int mod = 1e9 + 7;
#define int long long
int t, n;
int a[N], mp[M];

signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    std::cin >> t;
    while(t --) {
        std::cin >> n;
        for(int i = 1; i <= n; i ++) {
            std::cin >> a[i];
            a[i] ^= a[i - 1];
        }
        for(int i = 0; i <= 2 * n; i ++) {
            mp[i] = 0;
        }
        mp[0] = 1;
        int ans = n * (n + 1) / 2;
        for(int i = 1; i <= n; i ++) {
            for(int j = 0; j * j <= n * 2; j ++) {
                int k = j * j;
                ans -= mp[a[i] ^ k];
            }
            mp[a[i]] ++;
        }
        std::cout << ans << '\n';
    }
    return 0;
}

D. Valiant's New Map

给出一个n * m的矩阵,求一个最大的l,满足矩阵中存在一个l * l的子矩阵,该子矩阵中每个数最小是l。

思路:一眼二分,二分前缀和处理,大于等于l的为1,否则为0,时间复杂度可行。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
#define int long long
const int N = 1e5 + 5;
int t, n, m;

signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    std::cin >> t;
    while(t --) {
        std::cin >> n >> m;
        std::vector<std::vector<int> > a(n + 1, std::vector<int>(m + 1));
        for(int i = 1; i <= n; i ++) {
            for(int j = 1; j <= m; j ++) {
                std::cin >> a[i][j];
            }
        }
        auto check = [&](int mid) {
            std::vector<std::vector<int> > dif(n + 1, std::vector<int>(m + 1));
            for(int i = 1; i <= n; i ++) {
                for(int j = 1; j <= m; j ++) {
                    if(a[i][j] >= mid)
                        dif[i][j] = 1;
                    else
                        dif[i][j] = 0;
                }
            }
            for(int i = 1; i <= n; i ++) {
                for(int j = 1; j <= m; j ++) {
                    dif[i][j] += (dif[i - 1][j] + dif[i][j - 1] - dif[i - 1][j - 1]);
                }
            }
            for(int i = 1; i + mid - 1 <= n; i ++) {
                for(int j = 1; j + mid - 1 <= m; j ++) {
                    if(dif[i + mid - 1][j + mid - 1] - dif[i + mid - 1][j - 1] - dif[i - 1][j + mid - 1] + dif[i - 1][j - 1] == mid * mid)
                        return true;
                }
            }
            return false;
        };
        int l = 1, r = 1e6;
        while(l < r) {
            int mid = l + r + 1 >> 1;
            if(check(mid))
                l = mid;
            else
                r = mid - 1;
        }
        std::cout << l << '\n';
    }
    return 0;
}

E. Graph Cost

给n个点,问能否连出m个边。如果要连u和v那么边权为gcd(u, v)。每次可以连k个边权为k + 1的边,代价为k + 1,问最小代价。

思路:佬的思路!orzorz

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
const int N = 1e6 + 5;
int t;
ll n, m, tot;
ll phi[N], prime[N], sz[N];
bool vis[N];

void getphi() {
    vis[0] = vis[1] = 1;
    phi[1] = 1;
    for(int i = 2; i <= N - 2; i ++) {
        if(!vis[i]) {
            prime[++ tot] = i;
            phi[i] = i - 1;
        }
        for(int j = 1; j <= tot; j ++) {
            if(i * prime[j] > N)
                break;
            vis[i * prime[j]] = 1;
            if(i % prime[j] == 0) {
                phi[i * prime[j]] = phi[i] * prime[j];
                break;
            }
            else
                phi[i * prime[j]] = phi[i] * (prime[j] - 1);
        }
    }
    phi[1] = 0;
    for(int i = 2; i <= N - 2; i ++) {
        phi[i] += phi[i - 1];
    }
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    getphi();
    std::cin >> t;
    while(t --) {
        std::cin >> n >> m;
        for(int i = 2; i <= n; i ++) {
            int res = n / i;
            sz[i] = phi[res];
        }
        ll ans = m;
        for(int i = n; i >= 2; i --) {
            ll h = sz[i] / (i - 1);
            ll c = std::min(h, (ll)m / (i - 1));
            ans += c;
            m -= (i - 1) * c;
        }
        if(m == 0)
            std::cout << ans << '\n';
        else
            std::cout << -1 << '\n';
    }
    return 0;
}

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

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

相关文章

探索云原生技术之容器编排引擎-Kubernetes/K8S详解(7)

❤️作者简介&#xff1a;2022新星计划第三季云原生与云计算赛道Top5&#x1f3c5;、华为云享专家&#x1f3c5;、云原生领域潜力新星&#x1f3c5; &#x1f49b;博客首页&#xff1a;C站个人主页&#x1f31e; &#x1f497;作者目的&#xff1a;如有错误请指正&#xff0c;将…

缓存(redis)与数据库(MYSQL)数据一致性问题

在MYSQL数据库集文章中&#xff0c;仔细的学习了一些MYSQL数据库的知识。但是&#xff0c;随着我们的业务越来越好&#xff0c;那么我们不可能直接去操作MYSQL数据库。因为直接去操作MYSQL终究会有比较多的I/O操作&#xff0c;而使整个系统的性能最终受到数据库I/O的制约而无法…

教外篇(6):C++ qrencode 实现二维码生成

系列文章目录 文章目录 系列文章目录前言一、qrencode库的基本使用二、BMP图片生成原理三、二维码生成四、放大图像、解决编码问题前言 该系列教程目录与说明可以查看这篇文章::C/C++教程 本文主要介绍如何使用C++来实现二维码的生成,使用到了开源库:qrencode 代码生成结…

C++入门--vector

目录 vector的介绍 vector的使用 对象的定义 遍历 reserve与resize insert与erase 迭代器失效 vector的模拟实现 vector的介绍&#xff1a; vector是表示可变大小数组的序列容器。 vector的使用&#xff1a; 对象的定义&#xff1a; void test_vector1() {vector<int…

ZYNQ图像-腐蚀膨胀笔记

大磊fpga 腐蚀 下图从左到右依次为a&#xff0c;b&#xff0c;c step1&#xff1a;将b中的黄色十字架在a中遍历 step2&#xff1a;当b的黄色方格在a中 没有碰到白色方格 时输出中心坐标 step3&#xff1a;将step2中所有输出的坐标涂成黄色&#xff0c;得出c图 膨胀 step1…

Redhat 7 安装 iftop软件

1.关闭subscription-manager vi /etc/yum/pluginconf.d/subscription-manager.conf enable 0 2.通过浏览器下载Centis-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo 3.上传至/etc/yum.repos.d/ 4.修改Centos-7.repo文件 #cd /etc/yum.repos.d/ #ls #vim CentOS…

怎么看电脑是32位还是64位?超级简单的方法!

熟悉计算机的朋友都知道&#xff0c;电脑系统可以分为32位和64位系统。它们之间有什么区别&#xff1f;它们支持不同的内存&#xff1a;32位操作系统最多支持4G内存&#xff0c;但64位系统可以支持4G、8G、16G、32G、64G、128G、256G等。兼容软件也不同&#xff1a;32位只支持3…

老照片修复方法是什么?这篇文章来告诉你

我们每年回老家时&#xff0c;都喜欢看看以前的老物件&#xff0c;尤其是照片&#xff0c;因为它承载了我们一代又一代人的回忆&#xff0c;不管过去了多久&#xff0c;家里的长辈拿到一张照片时&#xff0c;都可以准确的说出当时在哪里&#xff1f;在做什么&#xff1f;由此引…

基于python和cv2、pytorch实现的车牌定位、字符分割、字符识别项目

问题描述车牌的检测和识别的应用非常广泛&#xff0c;比如交通违章车牌追踪&#xff0c;小区或地下车库门禁。在对车牌识别和检测的过程中&#xff0c;因为车牌往往是规整的矩形&#xff0c;长宽比相对固定&#xff0c;色调纹理相对固定&#xff0c;常用的方法有&#xff1a;基…

linux C -- 内存管理

链接: linux C学习目录 linux C 共享内存机制共享内存物理位置shared memory常用函数编程模型范例write.cread.c修改参数实验共享内存 二个或者多个进程,共享同一块由系统内核负责维护的内部内存区域其地址空间通常被映射到堆和栈之间无需复制信息,最快的一种IPC机制需要考虑同…

web应用 —— HTML

web应用 一、HTML 1.插件 1.Live Server 模拟网站服务器 2.Auto Rename Tag 自动修改标签对 3.设置settings-format-勾选Format On Save &#xff08;创建文件&#xff1a;File-Open Folder-新建文件夹-命名文件&#xff09; 2.html文档结构 html所有标签为树形结构&…

基于YOLOv5+C3CBAM+CBAM注意力的海底生物[海参、海胆、扇贝、海星]检测识别分析系统

在我前面的一些文章中也有用到过很多次注意力的集成来提升原生检测模型的性能&#xff0c;这里同样是加入了注意力机制&#xff0c;区别在于&#xff0c;这里同时在两处加入了注意力机制&#xff0c;第一处是讲CBAM集成进入原生的C3模块中&#xff0c;在特征提取部分就可以发挥…

Microsoft系统漏洞修复

近期收到服务器系统漏洞扫描&#xff0c;发现很多关于Microsoft本身的系统漏洞。 有很多新手不知道怎么去修复系统漏洞&#xff0c;害怕一旦修复出问题&#xff0c;自己要担责。 我这里讲解下怎么准备的去寻找漏洞&#xff0c;并把它修复的过程。 我已下列的漏洞为例&#x…

RK3588平台开发系列讲解(日志篇)syslog介绍

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、syslog介绍二、syslog的架构三、syslog日志组成四、syslog接口说明1、openlog2、syslog3、closelog五、syslog.conf接口说明1、selector2、level3、action4、示例沉淀、分享、成长,让自己和他人都能有所收获!&am…

计算机网络第三章

目录 1.数据链路层 1.数据链路层的基本概述 2.数据链路层的功能概述 3.封装成帧 4.差错控制 1.检错编码 2.纠错编码 5.流量控制 1.停止-等待协议 2.选择重传协议(SR) 3.后退N帧协议(GBN) 6.介质访问控制 1.静态划分信道(信道划分介质访问控制) 2.动态分配信道 7.局域网 8.链路…

【经验分享】美赛报名以及注册方法-以2023年美赛为例

首先点击COMAP的官网链接&#xff1a; https://www.comap.com/ 然后选择Contests目录下的MCM/ICM 选择 Learn More and Register 然后选择 Click here to register for the 2023 MCM/ICM contest 注册分为两个步骤&#xff1a;顾问&#xff08;指导教师&#xff09;注册和填…

uni-app中自定义TabBar

1.由于原生的tabBar不能做到事件的拦截处理所以才自定义 注意点&#xff1a;自定义tabBar后则原生的uni.switchTab(OBJECT)不能再使用了 第一步&#xff1a;需要把原生的tabBar注释掉 第二步&#xff1a;在components下新建TabBar.vue文件&#xff08;那个页面用那个页面引入…

RHCE-Web服务器在linux上的部署,了解hash算法以及常见的加密方式

目录 1.WEB服务器&#xff08;Web Server&#xff09; 浏览器 工作原理 常见状态码&#xff1a; www服务器的基本配置 2.web服务配置样例 3.了解hash算法以及常见的加密方式 hash算法&#xff1a; 常用HASH函数 处理冲突方法 常用hash算法的介绍&#xff1a; ssh协议…

Composition步骤

纲要&#xff1a; SWC属于AUTOSAR的Component文件夹下&#xff0c;而Composition属于Composition文件夹下。 AUTOSAR Project Structure Sample目录 1. Create Software Composition 2. Add SWC into Composition 3. Create AssemblyConnector between SWCs 1. Create Sof…

优化SpringBoot程序启动速度

Spring Boot 程序优化 一、延迟初始化Bean 一般在 SpringBoot 中都拥有很多的耗时任务&#xff0c;比如数据库建立连接、初始线程池的创建等等&#xff0c;我们可以延迟这些操作的初始化&#xff0c;来达到优化启动速度的目的。Spring Boot 2.2 版本后引入 spring.main.lazy-i…