Educational Codeforces Round 174 (Rated for Div. 2)(ABCD)

news2025/2/22 0:53:18

 A. Was there an Array?

翻译:

        对于整数数组 a_{1},a_{2},...,a_n​,我们将其相等特征定义为数组 b_{2},b_{3},...,b_{n-1},其中,如果数组 a 的第 i 个元素等于其两个相邻元素,则 b_{i}=1;如果数组 a 的第 i 个元素不等于其至少一个相邻元素,则 b_i=0

        例如,对于数组 [1,2,2,2,3,3,4,4,4],相等特征为 [0,1,0,0,0,0,1,1]。

        给你数组 b_{2},b_{3},...,b_{n-1}。你的任务是确定是否存在这样一个数组 a具有相同特征。

思路:

        如果b存在101则错误。

实现:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

void solve(){
  int n;  
  cin>>n;
  vector<int>b(n-2);
  for (int i=0;i<n-2;i++) cin>>b[i];
  if (n<=4){
    cout<<"YES"<<endl;
  }else{
    for (int i=0;i<n-4;i++){
      if (b[i]==1 && b[i+1]==0 && b[i+2]==1){
        cout<<"NO"<<endl;
        return;
      }
    }
    cout<<"YES"<<endl;
  }
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    ll t;cin>>t;
    while (t--) solve();
}


B. Set of Strangers

 翻译:

        给你一张 n 行 m 列的表格。最初,第 i 行第 j 列的单元格的颜色为 a_{i,j}

        如果两个单元格不共用一条边,那么这两个单元格就是陌生人。陌生人可以用角接触。

        如果单元格集合中的所有单元格对都是陌生人,我们就说这个单元格集合是陌生人集合。根据定义,不超过一个单元格的集合就是陌生人集合。

        在一个步骤中,你可以选择任意一个陌生人集合,使其中的所有单元格都具有相同的颜色,然后给所有单元格涂上其他颜色。你可以选择得到的颜色。

        要使整个表格的颜色相同,最少需要多少步?

思路:

        对于所有相同颜色的块,如果存在相邻的块,则要2次操作使所有块变为同一颜色,否则只用1次操作。

        得到所有颜色的变换操作数,再减去所有颜色转换操作数中的最大值。

实现:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
vector<vector<int>> direct = {{0,1},{0,-1},{1,0},{-1,0}};
void solve(){
  int n,m;  
  cin>>n>>m;
  vector<int> cnts(n*m+1,0);
  vector<vector<int>> graph(n+2,vector<int>(m+2,0));
  for (int i=1;i<=n;i++){
    for (int j=1;j<=m;j++){
        cin>>graph[i][j];
    }
  }
  int mx = 0,summ = 0;
  for (int i=1;i<=n;i++){
    for (int j=1;j<=m;j++){
        int f = 0;
        for (auto d:direct){
            if (graph[i][j]==graph[i+d[0]][j+d[1]]){
                f = 1;
                break;
            }
        }
        cnts[graph[i][j]] = max(1+f,cnts[graph[i][j]]);
    }
  }
  for (int i=1;i<=n*m;i++){
    summ+=cnts[i];
    mx = max(mx,cnts[i]);
  }
  cout<<summ-mx<<endl;
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    ll t;cin>>t;
    while (t--) solve();
}


C. Beautiful Sequence

 翻译:

        如果下列条件成立,我们就称一个整数序列为优美序列:

  • 它的长度至少为 3;
  • 除第一个元素外,每个元素的左边都有一个比它小的元素;
  • 除最后一个元素外,每个元素的右边都有一个比它大的元素;

        例如,[1,4,2,4,7] 和 [1,2,4,8] 很美,但 [1,2]、[2,2,4] 和 [1,3,5,3] 却不美。

        回想一下,子序列是指在不改变其余元素顺序的情况下,通过删除某些元素可以从另一个序列得到的序列。

        给你一个大小为 n 的整数数组 a,其中每个元素都是从 1 到 3。你的任务是计算数组 a 的优美子序列的个数。

思路:

        按照条件优美序列为122...23。求满足条件的序列数量。使用dp状态机。

        dfs( i , k ) 为[ : i ]中以k为结尾的序列数量。

递推公式:

       dfs( i , k) = dfs( i-1 , k);

        当k==3时,如果a[i]==3,则当前3与前面的2结尾数字匹配 dfs(i , k)+=dfs(i-1 , 2)

        当k==2时,如果a[i]==2,则当前2与前面的1或2结尾数字匹配 dfs(i , k) += dfs(i-1 , 1)

        当k==1时,如果a[i]==1,1开头的数量+1 dfs( i , k )++;

边界条件:

        if (i<0) return 0;

实现:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 998244353;
void solve(){
  ll n;  
  cin>>n;
  vector<ll> a(n);
  for (ll i=0;i<n;i++) cin>>a[i];
  vector<vector<ll>> memo(n,vector<ll>(4,-1));
  // dp状态机:[:i] 中以 k 结尾的 子串数量
  auto dfs = [&](auto&& dfs,ll i,ll k)->ll{
    if (i<0) return 0;
    ll &res = memo[i][k];
    if (res!=-1) return res;
    res = dfs(dfs,i-1,k);
    if (k==3 && a[i]==3){
      res = (res+dfs(dfs,i-1,2))%mod;
    }else if (k==2 && a[i]==2){
      res = (res+dfs(dfs,i-1,2)+dfs(dfs,i-1,1))%mod;
    }else if (k==1 && a[i]==1){
      res += 1;
    }
    return res;
  };
  cout<<dfs(dfs,n-1,3)<<endl;
}

int main(){
    // 关闭输入输出流同步
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    ll t;cin>>t;
    while (t--) solve();
}

D. Palindrome Shuffle

  翻译:

       给你一个由小写拉丁字母组成的字符串 s。

        您可以对字符串 s 执行以下操作:选择 s 的一个连续子串(可能为空),然后将其洗码(按您的意愿重新排列子串中的字符)。

        回顾一下,回文字符串是指从第一个字符到最后一个字符以及从最后一个字符到第一个字符的读法相同的字符串。例如,字符串 a、bab、acca、bcabcbacb 是回文字符串,但字符串 ab、abbbaa、ccbb 不是回文字符串。

        您的任务是确定子串的最小可能长度,必须在该子串上执行上述操作才能将给定的字符串 s 转换成一个回文字符串。

思路:

        向左右指针去除左右边界相同的字符,剩余的部分 s 为由左端点开始重排或从右端点开始重排。对 s 进行中心扩展得到其最大的回文,如果回文的左剩余与右剩余部分进行重排后相同则,则对这些剩余部分进行重排即可。否则要重拍的部分必定在一半s以上,记录 s 的每种字符的位置,比较每种字符要重排的最大位置。

实现:

#include <bits/stdc++.h>
using namespace std;

int main () {
  ios_base::sync_with_stdio(0); cin.tie(0);
  int T;
  cin >> T;
  while (T--) {
    string s;
    cin >> s;
    int n = s.size();
    int l = 0, r = n-1;
    while (l < r && s[l] == s[r]) {
      l++;
      r--;
    }
    if (l > r) {
      cout << "0\n";
      continue;
    }
    s = s.substr(l, r-l+1);
    n = s.size();
    l = n/2-1, r = n/2;
    while (l >= 0 && s[l] == s[r]) {
      l--;
      r++;
    }
    string L = s.substr(0, l+1);
    string R = s.substr(r);
    sort(L.begin(), L.end());
    sort(R.begin(), R.end());
    if (L == R) {
      cout << l+1 << '\n';
      continue;
    }

    int ans = n;
    for (int _ = 0; _ < 2; _++) {
      vector<vector<int>> pos(26);
      int res = 0;
      for (int i = 0; i < n; i++) {
        pos[s[i]-'a'].push_back(i);
      }
      for (vector<int>& v: pos) {
        if (v.empty()) continue;
        res = max(res, v[(int)v.size()/2-1]+1);
      }
      ans = min(ans, res);
      reverse(s.begin(), s.end());
    }
    cout << ans << '\n';
  }
}

  有建议可以评论,我会积极改进qwq。

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

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

相关文章

如何在本机上模拟IP地址

如何在本机上模拟IP地址 前言 在某些开发或测试场景中&#xff0c;我们可能需要在本机上模拟一个指定的 IP 地址&#xff0c;并让局域网内的其他设备能够通过该 IP 访问本机提供的服务&#xff08;如 Web 服务&#xff09;。 本文将详细介绍如何在 Windows 和 macOS 系统上实…

【嵌入式Linux应用开发基础】进程间通信(1):管道

目录 一、管道的基本概念 二、管道的工作原理 三、管道的类型 3.1. 匿名管道&#xff08;Anonymous Pipe&#xff09; 3.2. 命名管道&#xff08;Named Pipe&#xff0c;FIFO&#xff09; 四、管道的读写规则 4.1. 匿名管道的读写规则 4.2. 命名管道的读写规则 五、管…

【DeepSeek】Mac m1电脑部署DeepSeek

一、电脑配置 个人电脑配置 二、安装ollama 简介&#xff1a;Ollama 是一个强大的开源框架&#xff0c;是一个为本地运行大型语言模型而设计的工具&#xff0c;它帮助用户快速在本地运行大模型&#xff0c;通过简单的安装指令&#xff0c;可以让用户执行一条命令就在本地运…

DHCP详解,网络安全零基础入门到精通实战教程!

一、DHCP简介 DHCP(Dynamic Host Configuration Protocol),动态主机配置协议&#xff0c;是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时&#xff0c;DHCP服务器就会根据DHCP协议给客户端分配IP&#xff0c;使得客户机能够利用这个IP上网。 DHCP前身是BOOTP&am…

【Prometheus】prometheus结合pushgateway实现脚本运行状态监控

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

立创实战派ESP32-S3烧录小智AI指南

小智 AI 聊天机器人-开源项目介绍 本项目是一个开源项目&#xff0c;主要用于教学目的。我们希望通过这个项目&#xff0c;能够帮助更多人入门 AI 硬件开发&#xff0c;了解如何将当下飞速发展的大语言模型应用到实际的硬件设备中。无论你是对 AI 感兴趣的学生&#xff0c;还是…

深度学习的集装箱箱号OCR识别技术,识别率99.9%

集装箱箱号OCR识别技术是一项结合计算机视觉和规则校验的复杂任务&#xff0c;以下是其关键要点及实现思路的总结&#xff1a; 1、集装箱号结构&#xff1a;11位字符&#xff0c;格式为公司代码(3字母)和序列号(6数字)以及校验码(1数字)和尺寸/类型代码(可选)&#xff0c;例如…

如何在Windows下使用Ollama本地部署DeepSeek R1

参考链接&#xff1a; 通过Ollama本地部署DeepSeek R1以及简单使用的教程&#xff08;超详细&#xff09; 【DeepSeek应用】DeepSeek R1 本地部署&#xff08;OllamaDockerOpenWebUI&#xff09; 如何将 Chatbox 连接到远程 Ollama 服务&#xff1a;逐步指南 首先需要安装oll…

【分布式理论12】事务协调者高可用:分布式选举算法

文章目录 一、分布式系统中事务协调的问题二、分布式选举算法1. Bully算法2. Raft算法3. ZAB算法 三、小结与比较 一、分布式系统中事务协调的问题 在分布式系统中&#xff0c;常常有多个节点&#xff08;应用&#xff09;共同处理不同的事务和资源。前文 【分布式理论9】分布式…

postgres源码学习之简单sql查询

postgres源码学习之sql查询 sql查询的主流程读取sql解析sql重写sql获得执行计划执行查询操作结果返回 sql查询的主流程 参考postgres的处理流程 由上一节&#xff0c;我们可以看到&#xff0c;当有新的连接通过权限认证之后&#xff0c;将进入等待接收sql语句&#xff0c;并执…

C#项目05-猜数字多线程

本项目利用多线程&#xff0c;通过点击按钮猜数字&#xff0c; 知识点 线程 基本概念 进程:一组资源&#xff0c;构成一个正在运行的程序&#xff0c;这些资源包括地址空间、文件句柄以及程序启动需要的其他东西的载体。 线程:体现一个程序的真实执行情况&#xff0c; 线…

《C语言动态顺序表:从内存管理到功能实现》

1.顺序表 1.1 概念 顺序存储的线性表&#xff0c;叫顺序表。 1.2顺序表存放的实现方式 可以使用数组存储数据&#xff0c;可以实现逻辑上相连&#xff0c;物理内存上也相连。也可以使用malloc在堆区申请一片连续的空间&#xff0c;存放数据&#xff0c;实现逻辑上相连&#…

通过API 调用本地部署 deepseek-r1 模型

如何本地部署 deepseek 请参考&#xff08;windows 部署安装 大模型 DeepSeek-R1&#xff09; 那么实际使用中需要开启API模式&#xff0c;这样可以无拘无束地通过API集成的方式&#xff0c;集成到各种第三方系统和应用当中。 上遍文章是基于Ollama框架运行了deepSeek R1模型…

DeepSeek-学习与实践

1.应用场景 主要用于学习与使用DeepSeek解决问题, 提高效率. 2.学习/操作 1.文档阅读 文档 DeepSeek -- 官网, 直接使用 --- 代理网站 --- 极客智坊 https://poe.com/DeepSeek-R1 https://time.geekbang.com/search?qdeepseek -- 搜索deepseek的资料 资料 20250209DeepSeekC…

撕碎QT面具(6):调节窗口大小后,控件被挤得重叠的解决方法

问题&#xff1a;控件重叠 分析原因&#xff1a;因为设置了最小大小&#xff0c;所以界面中的大小不会随窗口的变化而自动变化。 处理方案&#xff1a;修改mimumSize的宽度与高度为0&#xff0c;并设置sizePolicy为Expanding&#xff0c;让其自动伸缩。 结果展示&#xff08;自…

解锁机器学习核心算法 | K-平均:揭开K-平均算法的神秘面纱

一、引言 机器学习算法种类繁多&#xff0c;它们各自有着独特的优势和应用场景。前面我们学习了线性回归算法、逻辑回归算法、决策树算法。而今天&#xff0c;我们要深入探讨的是其中一种经典且广泛应用的聚类算法 —— K - 平均算法&#xff08;K-Means Algorithm&#xff09…

【Linux】匿名管道的应用场景-----管道进程池

目录 一、池化技术 二、简易进程池的实现&#xff1a; Makefile task.h task.cpp Initchannel函数&#xff1a; 创建任务&#xff1a; 控制子进程&#xff1a; 子进程执行任务&#xff1a; 清理收尾&#xff1a; 三、全部代码&#xff1a; 前言&#xff1a; 对于管…

PostgreSQL的学习心得和知识总结(一百六十九)|深入理解PostgreSQL数据库之 Group By 键值消除 的使用和实现

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

Python基于循环神经网络的情感分类系统(附源码,文档说明)

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

Zookeeper应用案例-分布式锁-实现思路

以下是具体实现代码 第一步&#xff1a;注册锁节点 第二步&#xff1a;获取锁节点&#xff0c;如果自己是最小的节点&#xff0c;就获取权限 第三步&#xff1a;拿到锁就开始自己的业务逻辑 第四步&#xff1a;业务逻辑好了就要释放这把锁 第五步&#xff1a;重新注册监听&…