Codeforces Round 925 (Div. 3)

news2025/1/19 19:38:59

在这里插入图片描述

Codeforces Round 925 (Div. 3)

Codeforces Round 925 (Div. 3)

A. Recovering a Small String

题意:给出一个整数n,为三个26个字母的位置序号的和,输出字典序最小的三个字符的字符串。

思路:直接倒推,顺一遍,后面的字母尽可能大。

AC code:

void solve() {
    cin >> n;
    string s = "";
    if (n > 27) {
        n -= 26;
        s += 'z';
        if (n > 26) {
            s += 'z';
            n -= 26;
            s += char('a' + n - 1);
        } else {
            s += char('a' + n - 1 - 1);
            s += 'a';
        }
    }else {
        s += 'a';
        s += 'a';
        n -= 2;
        s += char('a' + n - 2 + 1);
        cout << s << endl;
        return;
    }
    reverse(s.begin(),s.end());
    cout << s << endl;
}

B. Make Equal

题意:n杯水,首先一定能平分,前面的水可以往后匀,是否可以通过这种方式使得n杯水平分。

思路:贪心,从前往后捋,高出平均值记录一下,少了就去些。

AC code:

void solve() {
    cin >> n;
    vector<int> a(n, 0);
    int mx = 0;
    for (int i = 0; i < n; i ++) cin >> a[i], mx += a[i];
 
    int aver = mx / n, now = 0;
    for (int i = 0; i < n; i ++) {
        if (a[i] != aver) {
            if (a[i] >= aver) {
                now += a[i] - aver;
            } else {
                now -= (aver - a[i]);
                if (now < 0) {
                    cout << "NO" << endl;
                    return;
                }
            }
        }
    }
    if (!now) {
        cout << "YES" << endl;
        return;
    }
    cout << "NO" << endl;
}

C. Make Equal Again

题意:通过一次操作,操作为选择任意长度区间变为同一个数,将长度为n的数组a的所有元素相同,最小化区间的元素数量。

思路:注意只能操作一次,那么就仨情况了,前半,后半,中间,记录开头连续相同的数量,和结尾连续相同的数量,取最大,若首尾相等则相加,答案则为除了这些相等的头尾的其余元素。

AC code:

void solve() {
    cin >> n;
    map<int, int> mp;
    for (int i = 1; i <= n; i ++) cin >> a[i], mp[a[i]] ++;
 
    int ans = INF;
    int cnt = 1, cnt2 = 1;
    int l = 1, r = n;
    int st = a[1];
    for (int i = 2; i <= n; i ++) {
        if (a[i] == st) cnt ++;
        else break;
    }
 
    ans = min(ans, n - cnt);
    st = a[n];
    for (int i = n - 1; i >= 1; i --) {
        if (a[i] == st) cnt2 ++;
        else break;
    }
 
    ans = min(ans, n - cnt2);
 
    if (a[1] == a[n]) ans = min(ans, n - cnt - cnt2);
 
    ans = max(0LL, ans);
    cout << ans << endl;
}

D. Divisible Pairs

题意:找出数组中符合条件的元素对,条件为 a i + a j a_i + a_j ai+aj被x整除, a i − a j a_i - a_j aiaj被y整除。

思路:根据条件可以得知:

  • a i − a j a_i - a_j aiaj被y整除即 a i a_i ai % y == 0 && a j a_j aj % y == 0

  • a i + a j a_i + a_j ai+aj被x整除即 ( a i a_i ai%x+ a j a_j aj%x)% x == 0

由以上条件,用map<pair<int, int>, int>来记录每个元素对应xy取模,以第一个条件为基准,定一个元素通过第二个条件找另一个成对元素是否存在,详见代码。

AC code:

void solve() {
    cin >> n >> x >> y;
    for (int i = 1; i <= n; i ++) cin >> a[i];
 
    sort(a+1, a+n+1);
    map<PII, int> mp;
    for (int i = 1; i <= n; i ++) {
        mp[{a[i] % x, a[i] % y}] ++;
    }
    int ans = 0;
    for (int i = 1; i <= n; i ++) {
        int t = (x - (a[i] % x)) % x;
        ans += mp[{t, a[i] % y}];
        if (a[i] % x == t) ans --;
    }
    cout << ans / 2 << endl;
}

E. Anna and the Valentine’s Day Gift

题意:A和B对一个n数组中的元素进行轮流操作,A先手

  • 当A出手时,选择任意一个元素倒转,若倒转后有前置零则消除
  • 当B出手时,选择任意两个不同的元素进行拼接成一个新元素,原序列数量-1

A的获胜条件为最后留下的元素位数小于m,反之B获胜,双方博弈,谁能胜。

思路:

  • 重点只在于一个元素是否有可能通过倒置操作减少位数,即末尾是否有连续的0,且对于一个元素倒置最多减少一次位数

  • 我们可以计算每个元素初始后置0的数量,然后根据这个进行排序

  • 轮到A时则去优先消除后置0多的元素,轮到B则优先可以合并两个元素来保一个后置0

AC code:

int find(int x) {
    int cnt = 0;
    while (x) {
        cnt ++;
        x /= 10;
    }
    return cnt;
}
int find_0(int x) {
    int cnt = 0;
    while (x % 10 == 0 && x != 0) {
        cnt ++;
        x /= 10;
    }
    return cnt;
}
 
void solve() {
    cin >> n >> m;
    vector<PII> a(n);
    for (int i = 0; i < n; i ++) {
        int x; cin >> x;
        a[i].second = x;
        a[i].first = find_0(x);
    }
    sort(a.begin(), a.end());
    int ans = 0;
    for(int i = 0; i < n; i ++) {
        int t = a[i].second;
        ans += find(t);
 
        if (i % 2 != (n - 1) % 2) continue;
        ans -= find_0(t);
    }
    if (ans > m) cout << "Sasha" << endl;
    else cout << "Anna" << endl;
}

F. Chat Screenshots

题意:初始可能会有一个排序序列代表n个用户,用户会发送这个序列,发送的时候把自己调到第一个,即在原序列的基础上,每个用户发送的序列自己都是在第一位的,通过k名用户发送的序列,判断是否可能存在一个初始的序列。

思路:

  • 如果可能存在这样的序列,那么不会存在除当前用户之外的序列顺序出现矛盾的情况。

  • 这里可以直接存图,判断是否是一个拓扑排序即是否不存在环,存在则有矛盾条件。

  • 存图是注意一是不需要存每个用户序列的第一个元素,因为真假存疑,二是除了第一个元素之外序列顺序存,维护前后元素即可。

AC code:

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
#define db double
#define pb push_back
#define fast() ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;
 
typedef long long LL;
typedef pair<char, int> PCI;
typedef pair<int, int> PII;
const int N = 2e5+10, M = 2001;
const int INF = 0x3f3f3f3f3f, mod = 998244353;
int T, n, k;
vector<int> g[N];
int d[N];
 
void solve() {
    for (int i = 1; i <= n; i ++) {
        g[i].clear(), d[i] = 0;
    }
    cin >> n >> k;
    while (k --) {
        vector<int> ca(n);
        for (int i = 0; i < n; i ++) cin >> ca[i];
        for (int i = 1; i < n - 1; i ++) {
            g[ca[i]].pb(ca[i + 1]);
            d[ca[i + 1]] ++;
        }
    }
    queue<int> q;
    for (int i = 1; i <= n; i ++) {
        if (d[i] == 0) q.push(i);
    }
    int cnt = 0;
    while (!q.empty()) {
        auto t = q.front();
        q.pop();
        cnt ++;
        for (auto u : g[t]) {
            d[u] --;
            if (d[u] == 0) q.push(u);
        }
    }
    if (cnt == n) cout << "YES" << endl;
    else cout << "NO" << endl;
}
 
signed main() {
    fast();
    
    T = 1;
    cin >> T;
    while (T --) {
        solve();
    }
    return 0;
}

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

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

相关文章

第6个-滚动动画

Day 6 - Scroll Animation 1. 演示效果 2. 分析思路 布局 所有的内容进行水平垂直居中&#xff0c;可以使用**margin:0 auto;&#xff0c;也可以使用flex**布局&#xff1a; body {background-color: #efedd6;display: flex;flex-direction: column;justify-content: center…

腾讯云幻兽帕鲁服务器配置怎么选择合适?

腾讯云幻兽帕鲁服务器配置怎么选&#xff1f;根据玩家数量选择CPU内存配置&#xff0c;4到8人选择4核16G、10到20人玩家选择8核32G、2到4人选择4核8G、32人选择16核64G配置&#xff0c;腾讯云百科txybk.com来详细说下腾讯云幻兽帕鲁专用服务器CPU内存带宽配置选择方法&#xff…

音视频剪辑|FFMPEG|windows10下的音视频格式转换,遮挡填充,GIF动图制作,背景音频抽取,替换

前言&#xff1a; 最近对于音视频和图像的处理问题比较感兴趣&#xff0c;但发现很多目前需要的功能要么需要付费但不会过于麻烦&#xff0c;要么比较麻烦&#xff0c;很可能某个功能实现需要安装很多软件 例如&#xff0c;视频转GIF动图&#xff0c;该功能的实现要么使用Pho…

VMware清理拖拽缓存 Ubuntu硬盘情况占用分析

这两天在尝试编译Linux源码&#xff0c;我在win上将源码下载下来然后复制到ubuntu上&#xff0c;这一步我粗略看到了三种方法&#xff1a;安装VM tools&#xff0c;就可以使文件正常的在win和ubuntu中复制剪切&#xff1b;使用scp命令将win和linux系统链接起来&#xff1b;使用…

P5440 【XR-2】奇迹 (大模拟dfs+欧拉筛板子+闰年)

传送门https://www.luogu.com.cn/problem/P5440 相信奇迹的人&#xff0c;本身就和奇迹一样了不起。——笛亚 《星游记》 思路历程&#xff1a;很离谱的一题&#xff0c;在理论上并不困难&#xff0c;只要简单dfs欧拉筛就能过。在一开始&#xff0c;我采用了倒着模拟的思路&am…

JavaWeb:关于登录认证的简单拓展

前提介绍 本文基于文章-------JavaWeb&#xff1a;SpringBootWeb登录认证 --黑马笔记 -------再做简单拓展 如果没有关于登录认证知识的基础&#xff0c;可以先看上面所说的的文章&#xff0c;文章在专栏javaweb中&#xff0c;下面我为了大家观看&#xff0c;直接放了链接。…

服务降级(Sentinel)

服务降级 采用 SentinelResource 注解方式实现&#xff0c; 必要的 依赖必须引入 以及 切面Bean 接口代码 RequestMapping("/degrade")SentinelResource(value DEGRADE_RESOURCE_NAME, blockHandler "blockHandlerForDegrade",entryType EntryType.IN…

Excel模板2:进度条甘特图

Excel模板2&#xff1a;进度条甘特图 ‍ 今天复刻B站up【名字叫麦兜的狗狗】的甘特图&#xff1a;还在买Excel模板吗&#xff1f;自己做漂亮简洁的甘特图吧&#xff01;_哔哩哔哩_bilibili 阿里网盘永久分享&#xff1a;https://www.alipan.com/s/cXhq1PNJfdm 当前效果&…

2.13 数组练习

1、选择题 1.1、若有定义语句&#xff1a;int a[3][6]; &#xff0c;按在内存中的存放顺序&#xff0c;a 数组的第10个元素是 B A&#xff09;a[0][4] B) a[1][3] C)a[0][3] D)a[1][4] 解析&#xff1a;二维数组在内存中是以行优先的方式存放的。这意味着首先填充第一行的…

Excel练习:折线图突出最大最小值

Excel练习&#xff1a;折线图突出最大最小值 ​​ 要点&#xff1a;NA值在折现图中不会被绘制&#xff0c;看似一条线&#xff0c;实际是三条线。换成0值和""都不行。 ‍ 查看所有已分享Excel文件-阿里云 ‍ 学习的这个视频&#xff1a;Excel折线图&#xff0c…

java之jvm详解

JVM内存结构 程序计数器 Program Counter Register程序计数器(寄存器) 程序计数器在物理层上是通过寄存器实现的 作用&#xff1a;记住下一条jvm指令的执行地址特点 是线程私有的(每个线程都有属于自己的程序计数器)不会存在内存溢出 虚拟机栈(默认大小为1024kb) 每个线…

MySQL:常用指令

MySQL官网 一、在Windows 系统 cmd窗口里执行的命令 启动:net start MySQL停止:net stop MySQL卸载:sc delete MySQL 二、在macOS系统终端里执行的命令 启动&#xff1a;mysql.server start停止&#xff1a;mysql.server stop重启&#xff1a;mysql.server restart 三、执行帮…

微信小程序(四十四)鉴权组件插槽-登入检测

注释很详细&#xff0c;直接上代码 新增内容&#xff1a; 1.鉴权组件插槽的用法 2.登入检测示范 源码&#xff1a; app.json {"usingComponents": {"auth":"/components/auth/auth"} }app.js App({globalData:{//定义全局变量isLoad:false} })…

Excel模板1:彩色甘特图

Excel模板1&#xff1a;彩色甘特图 分享地址 当前效果&#xff1a;只需要填写进度&#xff0c; 其余效果都是自动完成的 。 阿里网盘永久分享&#xff1a;https://www.alipan.com/s/cXhq1PNJfdm ​省心。能用公式的绝不使用手动输入。 ​​ 这个区域以及标题可以手动输入…

react【四】css

文章目录 1、css1.1 react和vue css的对比1.2 内联样式1.3 普通的css1.4 css modules1.5 在react中使用less1.6 CSS in JS1.6.1 模板字符串的基本使用1.6.2 styled-components的基本使用1.6.3 接受传参1.6.4 使用变量1.6.5 继承样式 避免代码冗余1.6.6 设置主题色 1.7 React中添…

golang集成sentry: go-redis

网上没有找到go-redis集成sentry的库&#xff0c; 所以我简单实现了一个 代码&#xff1a; https://github.com/Shujie-Tan/go-redis-sentry 使用方法&#xff1a; import (redis_sentry "github.com/Shujie-Tan/go-redis-sentry" ) rdb : redis.NewClient(&re…

OpenCV-38 图像金字塔

目录 一、图像金字塔 1. 高斯金字塔 2. 拉普拉斯金字塔 一、图像金字塔 图像金字塔是图像中多尺度表达的一种&#xff0c;最主要用于图像的分割&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说&#xff0c;图像金字塔是同一图像不同分辨率的子图…

单片机学习笔记---DS18B20温度传感器

目录 DS18B20介绍 模拟温度传感器的基本结构 数字温度传感器的应用 引脚及应用电路 DS18B20的原理图 DS18B20内部结构框图 暂存器内部 单总线介绍 单总线电路规范 单总线时序结构 初始化 发送一位 发送一个字节 接收一位 接收一个字节 DS18B20操作流程 指令介…

C++ matplotlib 画图 Linux

Matplotlib-cpp画图 命令行下载matplotlibcpp git clone https://github.com/lava/matplotlib-cpp将matplotlibcpp.h移动到自己所用的工程 CMakeList.txt文件如下所示 cmake_minimum_required(VERSION 3.0.2) project(huatu)set(CMAKE_CXX_STANDARD 11)file(GLOB_RECURSE P…

假期作业 10

1.整理磁盘操作的完整流程&#xff0c;如何接入虚拟机&#xff0c;是否成功识别&#xff0c;对磁盘分区工具的使用&#xff0c;格式化&#xff0c;挂载以及取消挂载 U盘接入虚拟机 在虚拟机--->可移动设备--->找到U盘---->连接 检测U盘是否被虚拟机识别 ls /dev/s…