Educational Codeforces Round 2

目录

A. Extract Numbers

B. Queries about less or equal elements

C. Make Palindrome

E. Lomsat gelral


A. Extract Numbers

题意:太多不想翻译

思路:字符串模拟,我们使用一个临时变量t去储存每个符号直接的字符串,同时需要注意的是,我们对于空字符串也进行处理,然后在输出的时候判断一下即可。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
typedef long long ll;
const int maxv = 4e6 + 5;
typedef pair<ll, ll> pll;bool check(string s)//检查子段是否合法
{for(int i=0;i<s.size();i++){if(s[0]=='0'&&s.size()!=1){return false;}if(s[i]<'0'||s[i]>'9') return false;}return true;
}void solve()
{string s;cin>>s;s+=";";vector<string> c1,c2;string t;//储存每个符号之间的字符串for(int i=0;i<s.size();i++){if(s[i]==','||s[i]==';'){if(t.empty()) t.push_back('#');if(check(t)){c1.push_back(t);}else{c2.push_back(t);}t="";}else t+=s[i];}if(c1.size()){cout<<"\"";if(c1[0]!="#") cout<<c1[0];for(int i=1;i<c1.size();i++){cout<<",";if(c1[i]!="#") cout<<c1[i];}cout<<"\"";}else{cout<<"-";}cout<<endl;if(c2.size()){cout<<"\"";if(c2[0]!="#") cout<<c2[0];for(int i=1;i<c2.size();i++){cout<<",";if(c2[i]!="#") cout<<c2[i];}cout<<"\"";}else{cout<<"-";}cout<<endl;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;//cin >> t;while (t--){solve();}system("pause");return 0;
}

B. Queries about less or equal elements

题意:给你两个整数数组 a和 b。对于第二个数组 bj中的每个元素,你应该找出数组 a中小于或等于数值 bj的元素个数

思路:大水题,Lower bound即可。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
typedef long long ll;
const int maxv = 4e6 + 5;
typedef pair<ll, ll> pll;void solve()
{int n,m;cin>>n>>m;vector<int> a(n),b(m);for(int i=0;i<n;i++) cin>>a[i];for(int i=0;i<m;i++) cin>>b[i];sort(a.begin(),a.end());for(int i=0;i<m;i++){int t=upper_bound(a.begin(),a.end(),b[i])-a.begin()-1;if(t>=0){cout<<t+1<<" ";}else cout<<0<<" ";}cout<<endl;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;//cin >> t;while (t--){solve();}system("pause");return 0;
}

C. Make Palindrome

题意:给定一个字符串,你可以将其中任意一个字符替换,代价为1,或是对其进行排列,代价为0,令其变为回文串的代价最小且输出字典序最小的回文串

思路:贪心,用一个桶去统计每个字符的出现次数,我们让每个字符的出现次数为偶数,且让这种情况的代价最小。对字符串按长度为奇偶进行讨论:

1,奇数:这个时候,有一个字符串的出现次数为奇数,因为所有字符的出现次数非奇即偶,所以我们对于所有出现次数为奇数的字符,对其次数减一,并将其放入一个vector中进行存储,最后我们一定可以得到一个长度为奇数的vector,此时的最优解为将其右半部分变为左半部分即可,例如:abcde,我们将其变为abcba,这样我们就只修改了d和e这两个字符,这样的花费一定最小。最后再将vector中的字符添加回桶中。

2,偶数:这个时候,只需要将为奇数的字符放入vector中然后进行变换即可。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
typedef long long ll;
const int maxv = 4e6 + 5;
typedef pair<ll, ll> pll;void solve()
{string s;cin>>s;map<char,int> mp;for(int i=0;i<s.size();i++){mp[s[i]]++;}int sz=s.size();/*int f=0;for(int i=0;i<sz;i++){if(s[i]!=s[sz-i-1]) f=1;}if(!f){cout<<s<<endl;return ;}*/if(sz%2){vector<char> res;for(auto [x,y]: mp){if(y%2){mp[x]--;res.push_back(x);}}for(int i=0;i<res.size()/2;i++){res[res.size()-1-i]=res[i];}for(auto x: res) mp[x]++;int i=0;vector<char> z(sz);z[sz/2]=res[res.size()/2];//长度为奇数的情况,最中间的字符直接赋值for(auto [x,y]: mp){//map的key本身有序,所以能直接构造if(y>0){y/=2;for(;y>0;y--){z[i]=z[sz-i-1]=x;i++;}}}for(auto x: z) cout<<x;cout<<endl;}else{vector<char> res;for(auto [x,y]: mp){if(y%2){mp[x]--;res.push_back(x);}}for(int i=0;i<res.size()/2;i++){res[res.size()-1-i]=res[i];}for(auto x: res) mp[x]++;int i=0;vector<char> z(sz);for(auto [x,y]: mp){if(y>0){y/=2;for(;y>0;y--){z[i]=z[sz-i-1]=x;i++;}}}for(auto x: z) cout<<x;cout<<endl;}
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;//cin >> t;while (t--){solve();}system("pause");return 0;
}

E. Lomsat gelral

题意:给定一颗树,求每个子树中颜色出现次数最多的颜色编号之和。

思路:裸的树上启发式合并。

树上启发式合并:可以高效的用于统计子树信息(不带修改的那种),时间复杂度为nlogn,极为优秀。

基本操作:两遍dfs:

第一遍dfs处理所有节点的相关信息,dfs序,轻儿子和重儿子等。

第二边dfs:

1,先处理所有轻儿子节点,计算但不保留其对于答案的贡献

2,处理所有重儿子节点,保留其对答案的贡献

3,将轻儿子合并进重儿子,计算其对于答案的贡献

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
typedef long long ll ;
const int maxv=4e6+5;
typedef pair<ll,ll> pll;int l[N],r[N],id[N],sz[N],hs[N],tot;
vector<int> e[N];
int c[N],cnt[N];
ll maxcnt,sumcnt;
ll ans[N];
void dfs1(int u,int f)
{l[u]=++tot;id[tot]=u;sz[u]=1;hs[u]=-1;for(auto v: e[u]){if(v==f) continue;dfs1(v,u);sz[u]+=sz[v];if(hs[u]==-1||sz[v]>sz[hs[u]]) hs[u]=v;}r[u]=tot;
}void add(int x)
{x=c[x];cnt[x]++;if(cnt[x]>maxcnt) maxcnt=cnt[x],sumcnt=0;if(cnt[x]==maxcnt) sumcnt+=x;
}
void del(int x)
{x=c[x];cnt[x]--;
}void dfs2(int u,int f,bool keep)
{for(auto v: e[u]) {if(v!=f&&v!=hs[u]) dfs2(v,u,false);}if(hs[u]!=-1) dfs2(hs[u],u,true);for(auto v: e[u]){if(v!=f&&v!=hs[u]){for(int x=l[v];x<=r[v];x++ ) add(id[x]);}}add(u);ans[u]=sumcnt;if(!keep){for(int x=l[u];x<=r[u];x++) del(id[x]);sumcnt=0,maxcnt=0;}
}void solve() 
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>c[i];}for(int i=1;i<=n-1;i++){int u,v;cin>>u>>v;e[u].push_back(v);e[v].push_back(u);}dfs1(1,0);dfs2(1,0,false);for(int i=1;i<=n;i++){cout<<ans[i]<<" ";}cout<<endl;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}system("pause");return 0;
}

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

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

相关文章

0.flink学习资料

论文&#xff1a; &#xff08;1&#xff09;google dataflow model 下载链接&#xff1a;p1792-Akidau.pdf (vldb.org) Akidau T, Bradshaw R, Chambers C, et al. The dataflow model: a practical approach to balancing correctness, latency, and cost in massive-scal…

Gateway网关路由以及predicates用法(项目中使用场景)

1.Gatewaynacos整合微服务 服务注册在nacos上&#xff0c;通过Gateway路由网关配置统一路由访问 这里主要通过yml方式说明&#xff1a; route: config: #type:database nacos yml data-type: yml group: DEFAULT_GROUP data-id: jeecg-gateway-router 配置路由&#xff1a;…

【c++】c++的一些技术操作

pthread_create 的第三个参数&#xff0c;为函数指针&#xff0c;指向处理线程函数的地址。该函数&#xff0c;要求为静态函数。如果处理线程函数为类成员函数时&#xff0c;需要将其设置为静态成员函数。C静态成员函数访问非静态成员 https://blog.csdn.net/yueguangmuyu/arti…

Linux网络编程_Ubuntu环境配置安装

文章目录&#xff1a; 一&#xff1a;基于vmware虚拟机安装Ubuntu系统&#xff08;虚拟机&#xff09; 1.vmware下载 2.Ubuntu系统下载 3.配置 3.1 无法连网&#xff1a;这里很容易出现问题 3.2 更换国内源 3.3 无法屏幕适配全屏 3.4 汉化 二&#xff1a;直接安装Ubun…

宁德时代与陕汽签署十年战略合作协议,助力商用车电动化进程

据报道&#xff0c;宁德时代新能源科技股份有限公司与陕西汽车控股集团有限公司已经签署了一项为期十年的战略合作协议。双方的合作旨在推动商用车电池技术的发展&#xff0c;并面向商用车全领域应用。 这次战略合作具有重要意义&#xff0c;为宁德时代和陕汽启动了全面合作的序…

2021年3月全国计算机等级考试真题(C语言二级)

2021年3月全国计算机等级考试真题&#xff08;C语言二级&#xff09; 第1题 算法空间复杂度的度量方法是&#xff08;&#xff09; A. 算法程序的长度 B. 算法所处理的数据量 C. 执行算法所需要的工作单元 D. 执行算法所需要的存储空间 正确答案&#xff1a;D 第2题 下列叙…

现代CSS中的换行布局技术

在现代网页设计中&#xff0c;为了适应不同屏幕尺寸和设备类型&#xff0c;换行布局是一项重要的技术。通过合适的布局技术&#xff0c;我们可以实现内容的自适应和优雅的排版。本文将介绍CSS中几种常见的换行布局技术&#xff0c;探索它们的属性、代码示例和解析&#xff0c;帮…

可视化绘图技巧100篇基础篇(三)-条形图(二)

目录 前言 描绘条形图的要素 绘图工具及代码 Tableau 一、基本条形图 1.普通条形图

【自创】关于前端js的“嵌套地狱”的遍历算法

欢迎大家关注我的CSDN账号 欢迎大家关注我的哔哩哔哩账号&#xff1a;卢淼儿的个人空间-卢淼儿个人主页-哔哩哔哩视频 此saas系统我会在9月2号之前&#xff0c;在csdn及哔哩哔哩上发布成套系列教学视频。敬请期待&#xff01;&#xff01;&#xff01; 首先看图 这是我们要解…

PHP中in_array()函数用法详解

in_array() 函数是PHP中常用的数组函数之一&#xff0c;用于搜索数组中是否存在指定的值。 语法 bool in_array ( mixed $needle , array $haystack [, bool $strict FALSE ] ) 参数描述needle必需。规定要在数组搜索的值。haystack必需。规定要搜索的数组。strict可选。如…

Spring Boot 知识集锦之Spring-Batch批处理组件详解

文章目录 0.前言1.参考文档2.基础介绍2.1. 核心组件 3.步骤3.1. 引入依赖3.2. 配置文件3.3. 核心源码 4.示例项目5.总结 0.前言 背景&#xff1a; 一直零散的使用着Spring Boot 的各种组件和特性&#xff0c;从未系统性的学习和总结&#xff0c;本次借着这个机会搞一波。共同学…

无涯教程-TensorFlow - TensorBoard可视化

TensorFlow包含一个可视化工具&#xff0c;称为TensorBoard&#xff0c;它用于分析数据流图&#xff0c;还用于了解机器学习模型。 TensorBoard的重要功能包括查看有关垂直对齐的任何图形的参数和详细信息的不同类型统计的视图。 深度神经网络包括多达36&#xff0c;000个节点…

HCIP——VLAN实验2

一.实验要求 1.PC1/3的接口均为access模式&#xff0c;且属于van2&#xff0c;在同一网段 2.PC2/4/5/6的IP地址在同一网段&#xff0c;与PC1/3不在同一网段 3.PC2可以访问4/5/6&#xff0c;PC4不能访问5/6&#xff0c;PC5不能访问PC6 4.所有PC通过DHCP获取ip地址&#xff0c;PC…

《合成孔径雷达成像算法与实现》Figure3.10

代码复现如下&#xff1a; clc clear close all% 参数设置 TBP 100; % 时间带宽积 T 7.2e-6; % 脉冲持续时间 t_0 1e-6; % 脉冲回波时延% 参数计算 B TBP/T; …

设计模式详解-组合模式(整体部分模式)

类型&#xff1a;结构型模式 特点&#xff1a;依据树形结构来组合对象&#xff0c;用来表示部分以及整体层次 作用&#xff1a;模糊了简单元素和复杂元素的概念&#xff0c;客户程序可以像处理简单元素一样来处理复杂元素&#xff0c;从而使得客户程序与复杂元素的内部结构解…

unity 之Transform组件(汇总)

文章目录 理论指导结合例子 理论指导 当在Unity中处理3D场景中的游戏对象时&#xff0c;Transform 组件是至关重要的组件之一。它管理了游戏对象的位置、旋转和缩放&#xff0c;并提供了许多方法来操纵和操作这些属性。以下是关于Transform 组件的详细介绍&#xff1a; 位置&a…

react与vue的区别

React和Vue.js是两个流行的JavaScript库/框架&#xff0c;用于构建用户界面。以下是React和Vue之间的一些主要区别&#xff1a; 学习曲线&#xff1a;Vue.js对于新手来说比React更容易学习和上手。 构建方式&#xff1a;React强调组件的可重用性&#xff0c;而Vue.js更注重模板…

C++进阶 特殊类的设计

本篇博客介绍&#xff1a;介绍几种特殊的类 特殊类的设计 设计一个类不能被拷贝设计一个类 只能在堆上创建对象设计一个类 只能在栈上创造对象设计一个类不能被继承单例模式饿汉模式懒汉模式单例模式对象的释放问题 总结 设计一个类不能被拷贝 我们的拷贝只会发生在两个场景当…

rust学习-打印结构体中的vec

write! 宏 将格式化后的数据写入到一个缓冲区&#xff08;buffer&#xff09;&#xff0c;而不是直接打印到标准输出或文件中。 这个缓冲区可以是字符串&#xff0c;也可以是需要写入的文件的缓冲区。 write!(writer, format_string, expr1, expr2, ...);writer 参数是一个实…

利用POM完成脚本分离实现企业级自动化(POM设计模式+页面的框架封装+测试报告截图)

利用POM完成脚本分离实现企业级自动化&#xff08;POM设计模式页面的框架封装测试报告截图&#xff09; 项目-测试-手工测试 项目-测试-手工测试 1.了解需求&#xff1b; 2.编写测试用例&#xff08;开始&#xff09;——功能测试组会去做的事情 3.执行测试用例——发送测试报…