Codeforces Round 1002 (Div. 2) A-D

news2025/2/4 16:48:08

复活!年后首场!本期封面是我自己AI弄的图

A - Milya and Two Arrays

题意

给两个所有数字出现次数都大于2的数组,问能不能修改排序之后对应位置相加得到新的数组使不同数字个数达到3

思路

直接计数就行了,不同的数字匹配一下就行

代码

//
// Created by Swan416 on 2025-02-02 22:32.
//
#include <bits/stdc++.h>
#define maxOf(a) *max_element(a.begin(),a.end())
#define minOf(a) *min_element(a.begin(),a.end())
#define all(a) a.begin(),a.end()
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

void solve()
{
    int n;
    scanf("%d",&n);
    vector<int> a(n),b(n);
    map<int,int> mpa,mpb;
    int cnta=0,cntb=0;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
        mpa[a[i]]++;
        if(mpa[a[i]]==1) cnta++;
    }
    for(int i=0;i<n;i++)
    {
        scanf("%d",&b[i]);
        mpb[b[i]]++;
        if(mpb[b[i]]==1) cntb++;
    }
    if(cnta>2 or cntb>2)
    {
        printf("YES\n");
        return;
    }
    else if(cnta==2 and cntb==2)
    {
        printf("YES\n");
        return;
    }
    else if(cnta==2 and cntb==1)
    {
        printf("NO\n");
        return;
    }
    else if(cnta==1 and cntb==2)
    {
        printf("NO\n");
        return;
    }
    else if(cnta==1 and cntb==1)
    {
        printf("NO\n");
        return;
    }
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        solve();
    }
    return 0;
}

C - Customer Service

题意

有n个队列,每一秒你可以选择一个队列清零,然后按照给定的数组加数据,最大话最后所有队列大小的MEX值

思路

统计最长的后缀1的个数然后从小到大sort一下,然后贪心往下取就行,如果有大于1的数一定会导致MEX在这里断掉的

代码

//
// Created by Swan416 on 2025-02-02 23:21.
//
#include <bits/stdc++.h>
#define maxOf(a) *max_element(a.begin(),a.end())
#define minOf(a) *min_element(a.begin(),a.end())
#define all(a) a.begin(),a.end()
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

void solve()
{
    int n;
    scanf("%d",&n);
    vector<vector<int>> q(n);
    for(int i=0;i<n;i++)
    {
        q[i].clear();
        q[i].push_back(i);
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            int x;
            scanf("%d",&x);
            q[i].push_back(x);
        }
    }
    vector<int> cnt(n+1,0);
    for(int i=0;i<n;i++)
    {
        for(int j=n;j>0;j--)
        {
            if(q[i][j]!=1)
                break;
            cnt[i]++;
        }
    }
    auto cmp=[&](vector<int>& x,vector<int>& y)
    {
        return cnt[x[0]]<cnt[y[0]];
    };
    sort(q.begin(),q.end(),cmp);
    int now=0;
    for(int i=0;i<n;i++)
    {
        int p=q[i][0];
        if(cnt[p]>=now)
        {
            now++;
        }
    }
    printf("%d\n",now);
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        solve();
    }
    return 0;
}

B - Cost of the Array

题意

将长度为n的数列分成k个非空块,然后第偶数块拼在一起,让其与iota的结果最早不匹配

思路

特判,疯狂的特判

代码

//
// Created by Swan416 on 2025-02-02 23:35.
//
#include <bits/stdc++.h>
#define maxOf(a) *max_element(a.begin(),a.end())
#define minOf(a) *min_element(a.begin(),a.end())
#define all(a) a.begin(),a.end()
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

void solve()
{
    int n,k;
    scanf("%d%d",&n,&k);
    vector<int> a(n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    vector<int> b;
    if(n==k)
    {
        for(int i=1;i<n;i+=2)
        {
            b.push_back(a[i]);
        }
        for(int i=0;i<b.size();i++)
        {
            if(b[i]!=i+1)
            {
                printf("%d\n",i+1);
                return;
            }
        }
        printf("%d\n",n/2+1);
        return;
    }
    for(int i=1;i<n;i++)
    {
        if(a[i]!=1 and n-i+1>=k)
        {
            printf("1\n");
            return;
        }
    }
    printf("2\n");
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        solve();
    }
    return 0;
}

D - Graph and Graph

题意

给你两张图,然后无限次操作:分别选当前点的邻居然后代价加上 ∣ u − v ∣ |u-v| uv,最小化总代价

思路

首先是无限次操作所以肯定是最后两个点在对应位置反复横跳使得每次操作代价都是加0,我们先标记图上可以作为最终状态的点:也就是两个图上的这个点存在共同邻居的点。然后跑一遍dijkstra就行了

代码

//
// Created by Swan416 on 2025-02-03 00:10.
//
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;

const int N = 1145;
int n, s1, s2;
vector<int> G1[N], G2[N];
bool ok[N];

struct Node {
    int x, y, cost;
    bool operator>(const Node& other) const {
        return cost > other.cost;
    }
};

void solve() {
    scanf("%d%d%d", &n, &s1, &s2);
    int m1;
    scanf("%d", &m1);
    for (int i = 1; i <= n; ++i) {
        G1[i].clear();
        G2[i].clear();
    }
    for (int i = 0; i < m1; ++i) {
        int u, v;
        scanf("%d%d", &u, &v);
        G1[u].push_back(v);
        G1[v].push_back(u);
    }
    int m2;
    scanf("%d", &m2);
    for (int i = 0; i < m2; ++i) {
        int u, v;
        scanf("%d%d", &u, &v);
        G2[u].push_back(v);
        G2[v].push_back(u);
    }

    // 标记可以成为最终状态的点
    memset(ok, 0, sizeof(ok));
    for (int i = 1; i <= n; ++i) {
        for (int j : G1[i]) {
            if (find(G2[i].begin(), G2[i].end(), j) != G2[i].end()) {
                ok[i] = true;
                break;
            }
        }
    }

    // Dijkstra找最小成本到达最终状态点的成本
    priority_queue<Node, vector<Node>, greater<Node>> pq;
    map<pii, int> dist;
    pq.push({s1, s2, 0});
    dist[{s1, s2}] = 0;
    ll ans = LLONG_MAX;

    while (!pq.empty()) {
        Node cur = pq.top();
        pq.pop();

        if (cur.cost > dist[{cur.x, cur.y}]) {
            continue;
        }

        if (cur.x == cur.y && ok[cur.x]) {
            ans = min(ans, (ll)cur.cost);
            break;
        }

        for (int nx : G1[cur.x]) {
            for (int ny : G2[cur.y]) {
                int new_cost = cur.cost + abs(nx - ny);
                if (dist.find({nx, ny}) == dist.end() || new_cost < dist[{nx, ny}]) {
                    dist[{nx, ny}] = new_cost;
                    pq.push({nx, ny, new_cost});
                }
            }
        }
    }

    if (ans == LLONG_MAX) {
        printf("-1\n");
    } else {
        printf("%lld\n", ans);
    }
}

int main() {
    int T;
    scanf("%d", &T);
    while (T--) {
        solve();
    }
    return 0;
}

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

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

相关文章

OpenGL学习笔记(七):Camera 摄像机(视图变换、LookAt矩阵、Camera类的实现)

文章目录 摄像机/观察空间/视图变换LookAt矩阵移动相机&#xff08;处理键盘输入&#xff09;移动速度欧拉角移动视角&#xff08;处理鼠标输入&#xff09;缩放场景&#xff08;处理滚轮输入&#xff09;Camera类 摄像机/观察空间/视图变换 在上一节变换中&#xff0c;我们讨…

『VUE』vue-quill-editor富文本编辑器添加按钮houver提示(详细图文注释)

目录 预览效果新建一个config.js存放标题编写添加提示的方法调用添加标题方法的生命周期总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 预览效果 新建一个config.js存放标题 export const titleConfig [{ Choice: .ql-bold…

如何使用 DeepSeek 和 Dexscreener 构建免费的 AI 加密交易机器人?

我使用DeepSeek AI和Dexscreener API构建的一个简单的 AI 加密交易机器人实现了这一目标。在本文中&#xff0c;我将逐步指导您如何构建像我一样的机器人。 DeepSeek 最近发布了R1&#xff0c;这是一种先进的 AI 模型。您可以将其视为 ChatGPT 的免费开源版本&#xff0c;但增加…

微信登录模块封装

文章目录 1.资质申请2.combinations-wx-login-starter1.目录结构2.pom.xml 引入okhttp依赖3.WxLoginProperties.java 属性配置4.WxLoginUtil.java 后端通过 code 获取 access_token的工具类5.WxLoginAutoConfiguration.java 自动配置类6.spring.factories 激活自动配置类 3.com…

SRS代码目录

代码目录&#xff1a; src/目录下核心代码&#xff1a; core&#xff1a;核心功能模块&#xff0c;包括日志、配置、错误处理等&#xff1b;protocol&#xff1a;实现RTMP、HTTP-FLV、HLS等协议的模块&#xff1b;app&#xff1a;应用层的实现&#xff0c;包括流的发布、播放…

机器学习--1.KNN机器学习入门

1、机器学习概述 1.1、什么是机器学习 机器学习&#xff08;Machine Learning&#xff09;是人工智能&#xff08;Artificial Intelligence&#xff09;领域的一个子集&#xff0c;它主要关注如何让计算机系统通过经验学习&#xff08;数据&#xff09;并自动改进性能。机器学…

Adaptive LLM Transformer²

看到了一个不错的论文https://arxiv.org/pdf/2501.06252 TRANSFORMER-SQUARED: SELF-ADAPTIVE LLMS 挺有意思的&#xff0c;是一家日本AI公司SakanaAI的论文&#xff08;我以前写过他们的不训练提升模型的能力的文章&#xff0c;感兴趣可以去翻&#xff09;它家有Lion Jones坐镇…

基于LabVIEW的Modbus-RTU设备通信失败问题分析与解决

在使用 LabVIEW 通过 Modbus-RTU 协议与工业设备进行通信时&#xff0c;可能遇到无法正常发送或接收指令的问题。常见原因包括协议参数配置错误、硬件连接问题、数据帧格式不正确等。本文以某 RGBW 控制器调光失败为例&#xff0c;提出了一种通用的排查思路&#xff0c;帮助开发…

直方图:摄影中的视觉数据指南

目录 一、直方图基础&#xff1a;揭开它的神秘面纱 二、解读直方图类型&#xff1a;亮度与色彩的密码 &#xff08;一&#xff09;亮度直方图 &#xff08;二&#xff09;RGB 直方图 三、拍摄中巧用直方图&#xff1a;优化曝光与效果 &#xff08;一&#xff09;精准判断曝…

IM 即时通讯系统-51-MPush开源实时消息推送系统

IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术&#xff0c;提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…

【Linux】从硬件到软件了解进程

个人主页~ 从硬件到软件了解进程 一、冯诺依曼体系结构二、操作系统三、操作系统进程管理1、概念2、PCB和task_struct3、查看进程4、通过系统调用fork创建进程&#xff08;1&#xff09;简述&#xff08;2&#xff09;系统调用生成子进程的过程〇提出问题①fork函数②父子进程关…

2024-我的学习成长之路

因为热爱&#xff0c;无畏山海

Kamailio 不通过 dmq 实现注册复制功能

春节期间找到一篇文章&#xff0c;需要 fg 才能看到&#xff1a; https://medium.com/tumalevich/kamailio-registration-replication-without-dmq-65e225f9a8a7 kamailio1 192.168.56.115 kamailio2 192.168.56.116 kamailio3 192.168.56.117 route[HANDLE_REPLICATION] {i…

大模型系列21-AI聊天机器人

聊天机器人 背景机器学习基础监督学习&#xff08;Supervised Learning&#xff09;概念应用场景主要问题 无监督学习&#xff08;Unsupervised Learning&#xff09;概念常见方法应用场景 强化学习&#xff08;Reinforcement Learning&#xff09;概念关键要素应用场景 模型优…

25.2.3 【洛谷】作为栈的复习不错(学习记录)

今天学习的东西不算多&#xff0c;放了一个星期假&#xff0c;感觉不少东西都没那么清楚&#xff0c;得复习一下才行。今天搞个栈题写&#xff0c;把栈复习一下&#xff0c;明天进入正轨&#xff0c;边复习边学习新东西&#xff0c;应该会有二叉树的学习等等... 【洛谷】P1449 …

Android开发工作经历整理

一.无人机应用软件开发 集成大疆官网的DJIMobileSDK到AS中编写软件&#xff0c;操控无人机执行多个航点任务。集成OpenCV库进行图像识别&#xff0c;通过获取参数&#xff0c;根据算法执行sdk&#xff0c;使无人机降落到机库&#xff0c;并执行后续的换电操作。待无人机就绪后…

C++中常用的十大排序方法之4——希尔排序

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C中常用的排序方法之4——希尔排序的相…

自动驾驶---两轮自行车的自主导航

1 背景 无人驾驶汽车最早出现在DARPA的比赛中&#xff0c;从那个时刻开始&#xff0c;逐渐引起全球学者的注意&#xff0c;于是从上个世纪开始各大高校院所开始了无人汽车的研发。直到这两年&#xff0c;无人驾驶汽车才开始走进寻常百姓家&#xff0c;虽然目前市面上的乘用车还…

四、GPIO中断实现按键功能

4.1 GPIO简介 输入输出&#xff08;I/O&#xff09;是一个非常重要的概念。I/O泛指所有类型的输入输出端口&#xff0c;包括单向的端口如逻辑门电路的输入输出管脚和双向的GPIO端口。而GPIO&#xff08;General-Purpose Input/Output&#xff09;则是一个常见的术语&#xff0c…

PostgreSQL 数据备份与恢复:掌握 pg_dump 和 pg_restore 的最佳实践

title: PostgreSQL 数据备份与恢复:掌握 pg_dump 和 pg_restore 的最佳实践 date: 2025/1/28 updated: 2025/1/28 author: cmdragon excerpt: 在数据库管理中,备份与恢复是确保数据安全和业务连续性的关键措施。PostgreSQL 提供了一系列工具,以便于数据库管理员对数据进行…