牛客周赛 Round 15

news2025/1/20 3:39:29

A、

题目描述

游游拿到了一个正整数,她希望将它切割成两部分,使得它们的和为偶数。游游想知道有多少种合法的切割方案?
注:切割后的正整数允许出现前导零。

输入描述:

一个正整数,大小不超过10^100000

输出描述:

一个整数,代表切割的方案数。

示例1

输入

103

输出

1

说明

切割成1+03=4是合法的,但10+3=13为奇数,不符合要求。所以有1种合法方案。

 思路:两部分,其中有一部分最后一位肯定是固定的。枚举就行

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define fp(i,a,b) for(int i=a;i<=b;++i)
#define PII pair<int,int>
const int N=1e5+10;
const int mod=1e9+7;
const double eps=1e-5;
typedef double db;
int n;
int qsm(int x,int n)
{
	int res=1;
	while(n)
	{
		if(n&1)res=res*x%mod;
		x=x*x%mod;
		n>>=1;
	} 
	return res;
}
void solve()
{
   ; 
}
string s;
int sum=0;
signed main()
{
	cin>>s;
	int sz=s.size();
	int f=s[sz-1]-'0';
	for(int i=0;i<sz-1;i++)
	{
		int x=s[i]-'0';
		if((x+f)&1){
			;
		}
		else sum++;
	}
	cout<<sum<<"\n";
	
	return 0;
} 





B、

题目描述

对于一个小写字母而言,游游可以通过一次操作把这个字母变成相邻的字母。'a'和'b'相邻,'b'和'c'相邻,以此类推。特殊的,'a'和'z'也是相邻的。可以认为,小写字母的相邻规则为一个环。

游游拿到了一个仅包含小写字母的字符串,她想知道,使得所有字母都相等至少要多少次操作?

输入描述:

 
 

一个仅包含小写字母,长度不超过100000的字符串。

输出描述:

 
 

一个整数,代表最小的操作次数。

示例1

输入

yab

输出

3

说明

 
 

第一次操作,把'y'变成'z',字符串变成了"zab"

第二次操作,把'b'变成'a',字符串变成了"zaa"

第三次操作,把'z'变成'a',字符串变成了"aaa"

 

思路:枚举要变成哪一个字符就行

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define fp(i,a,b) for(int i=a;i<=b;++i)
#define PII pair<int,int>
const int N=1e5+10;
const int mod=1e9+7;
const double eps=1e-5;
typedef double db;
int n;
int qsm(int x,int n)
{
	int res=1;
	while(n)
	{
		if(n&1)res=res*x%mod;
		x=x*x%mod;
		n>>=1;
	} 
	return res;
}
void solve()
{
   ; 
}
string s;
int sum=0;
int mmin=1e18;
signed main()
{
	cin>>s;
	int sz=s.size();
	
	for(int i=0;i<=25;i++)
	{
		int sum=0;
		char c='a'+i;
		for(int j=0;j<sz;j++)
		{
			int f=min(abs(s[j]-c),26-abs(s[j]-c));
			sum+=f;
		}
		mmin=min(mmin,sum);
	}
	cout<<mmin<<"\n";
	
	
	return 0;
} 





 C、


题目描述

游游有一个仅由'0'、'1'、'2'组成的字符串,但其中的一些字符被替换成了'?'。游游已经不记得原串是什么样子了,但她还记得该字符串有以下性质:

1. 字符串的相邻的字符都是不相等的。

2. 字符串的所有长度为3的连续子串,代表的三进制数的数值都是偶数。

游游希望你帮忙还原该串,你能帮帮她吗?

输入描述:

一个仅由'0'、'1'、'2'和'?'组成的字符串。'?'字符代表未知字符。
字符串长度不超过1000。
对于50%的数据,'?'字符的数量不超过2个。对于其余数据则无以上限制。

输出描述:

 
 

如果没有合法的解,则说明游游记错了,请输出-1。

否则输出一个合法的字符串。有多解时输出任意即可。

示例1

输入

1?1

输出

121

说明

 
 

121作为三进制数,其数值为16,为偶数。

输出101也是合法的。

示例2

输入

0??2

输出

0202

说明

 
 

020代表的三进制数为6,202代表的三进制数为20,都是偶数。且字符串没有两个相邻字符相等。

示例3

输入

11?

输出

-1

说明

 
 

由于已经有1和1相邻且相等,所以无解。

其实size>=4的时候 就不可能有1了。应该是个找规律的题目

#include<iostream>
#include<string>
using namespace std;
bool is(string s,string t){
    if(s.size()!=t.size())return false;
    for(int i=0;i<s.size();i++)
        if(s[i]!=t[i]&&s[i]!='?')
            return false;
    return true;
}
int main(){
    string s,t="",tt="";
    cin>>s;
    
    for(int i=0;i<s.size();i++)t+=char('0'+2*(i%2)),tt+=('0'+2*((i+1)%2));
    
    
    if(is(s,"101"))
        cout<<"101"<<endl;
    else if(is(s,"121"))
        cout<<"121"<<endl;
    else if(is(s,"1"))
        cout<<"1"<<endl;
    else if(is(s,"2"))
        cout<<"2"<<endl;
    else if(is(s,"0"))
        cout<<"0"<<endl;
    else if(is(s,"12"))
        cout<<"12"<<endl;
    else if(is(s,"10"))
        cout<<"10"<<endl;
    else if(is(s,"01"))
        cout<<"01"<<endl;
    else if(is(s,"21"))
        cout<<"21"<<endl;
    else if(is(s,"02"))
        cout<<"02"<<endl;
    else if(is(s,"20"))
        cout<<"20"<<endl;
    else if(is(s,t))
        cout<<t<<endl;
    else if(is(s,tt))
        cout<<tt<<endl;
    else
        cout<<-1<<endl;
    //cout<<t<<" "<<tt<<endl;
}

D、


题目描述

游游拿到了一棵树,树的每条边有边权。

游游准备选择一些边染成红色,她希望不存在两条染红的边共用同一个点,且最终染红边的权值之和尽可能大。你能帮帮她吗?

注:所谓树,即不包含重边、自环和回路的无向连通图。

输入描述:

第一行输入一个正整数n。代表节点的数量。

接下来的n−1n-1n−1行,每行输入三个正整数u,v,w,代表点u和点v之间有一条权值为w的无向边。

1≤n≤10^5
1≤u,v≤n
1≤w≤10^9

输出描述:

一个正整数,代表最终染红的边的权值之和的最大值。

示例1

输入

5
1 2 2
2 3 5
3 4 4
3 5 3

输出

6

说明

 
 

将点1和点2、点3和点4的边染红

 

 

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define fp(i,a,b) for(int i=a;i<=b;++i)
#define PII pair<int,int>
const int N=2e5+10;
const int mod=1e9+7;
const double eps=1e-5;
typedef double db;
int n;
int e[N],ne[N],w[N],h[N],idx;
void add(int x,int y,int z)
{
	e[idx]=y;
	ne[idx]=h[x];
    w[idx]=z;
    h[x]=idx++;
}
int dp[N][2];
void dfs(int x,int fa)
{
//	cout<<x<<" "<<fa<<"\n";
	int mmax=0;
	for(int i=h[x];~i;i=ne[i])
	{
		int j=e[i];
		if(j==fa)continue;
		dfs(j,x);
		dp[x][0]+=max(dp[j][0],dp[j][1]);
		dp[x][1]=max(dp[x][1],w[i]+dp[j][0]);
	}
//	cout<<x<<" "<<dp[x][0]<<" "<<dp[x][1]<<"\n";
}
signed main()
{
    cin>>n;
	
	memset(h,-1,sizeof h);
	
	fp(i,1,n-1)
	{
	   int a,b,c;
	   cin>>a>>b>>c;
	   add(a,b,c);
	   add(b,a,c);	
	}	
	dfs(1,-1);
	cout<<max(dp[1][0],dp[1][1]);
	return 0;
} 
//dp[fa][0] 不选与子节点的边 




 这是我最一开始的代码。

dp[x][0] 我不要x与子节点j的边 那我加上所有max(dp[j][0],dp[j][1])就行了

dp[x][1]我要x与子节点j的边+dp[j][0]

但是其他的子节点dp[j][1]我没有算。感觉得求个sum?

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define fp(i,a,b) for(int i=a;i<=b;++i)
#define PII pair<int,int>
const int N=2e5+10;
const int mod=1e9+7;
const double eps=1e-5;
typedef double db;
int n;
int e[N],ne[N],w[N],h[N],idx;
void add(int x,int y,int z)
{
	e[idx]=y;
	ne[idx]=h[x];
    w[idx]=z;
    h[x]=idx++;
}
int dp[N][2];
void dfs(int x,int fa)
{
	for(int i=h[x];~i;i=ne[i])
	{
		int j=e[i];
		if(j==fa)continue;
		dfs(j,x);
		dp[x][0]+=max(dp[j][0],dp[j][1]);
	}
	for(int i=h[x];~i;i=ne[i])
	{
		int j=e[i];
		if(j==fa)continue;
		dp[x][1]=max(dp[x][1],dp[x][0]-max(dp[j][0],dp[j][1])+dp[j][0]+w[i]);
	}
}
signed main()
{
    cin>>n;
	
	memset(h,-1,sizeof h);
	
	fp(i,1,n-1)
	{
	   int a,b,c;
	   cin>>a>>b>>c;
	   add(a,b,c);
	   add(b,a,c);	
	}	
	dfs(1,-1);
	cout<<max(dp[1][0],dp[1][1]);
	return 0;
} 
/*
9
1 2 4
1 7 4
1 4 5
2 8 7
2 5 7
4 3 11
3 9 123
4 6 33
*/




后来的代码就是利用dp[x][0]让这个子节点j的恢复 这样就不用求sum这种了。

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

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

相关文章

参数解析(牛客)

目录 一、题目 二、代码 一、题目 二、代码 #include <iostream> #include <vector> using namespace std;int main() {string s;getline(cin, s);int i 0;vector<string>ret;while (i < s.size()){if (s[i] )//遇到空格直接跳过{i;}else if (s[i] …

[部署网站]01安装宝塔面板搭建WordPress

宝塔面板安装WordPress&#xff08;超详细&#xff09;_Wordpress主题网 参考教程 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 官网 1.首先你需要一个服务器或者主机 &#xff08;Windows系统或者Linux系统都可以&#xff09; 推荐Linux系统更稳定&#xff0c;…

基于Java的个人健康管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

LeetCode 1095. 山脉数组中查找目标值【数组,二分】1827

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

CEC2013(MATLAB):霸王龙优化算法(Tyrannosaurus optimization)求解CEC2013

一、霸王龙优化算法TROA 霸王龙优化算法&#xff08;Tyrannosaurus optimization&#xff0c;TROA&#xff09;由Venkata Satya Durga Manohar Sahu等人于2023年提出&#xff0c;该算法模拟霸王龙的狩猎行为&#xff0c;具有搜索速度快等优势。 参考文献&#xff1a;Venkata S…

CEC2013(MATLAB):螳螂搜索算法(Mantis Search Algorithm,MSA)求解CEC2013

一、螳螂搜索算法 螳螂搜索算法&#xff08;Mantis Search Algorithm&#xff0c;MSA&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模拟螳螂独特的狩猎和性同类相食行为。MSA由三个优化阶段组成&#xff0c;包括寻找猎物&#xff08;探索&#xff09…

The normalized eigenfunction may not be uniformly bounded

See Article The Uniform Lipschitz Continuity of Eigenvalues of Sturm–Liouville Problems with Respect to the Weighted Function Jing Xu , Zhiwen Liu and Jiangang Qi https://doi.org/10.3390/sym15040911

Android Framework通信:Binder

文章目录 前言一、Linux传统跨进程通信原理二、Android Binder跨进程通信原理1、动态内核可加载模块2、内存映射3、Binder IPC 实现原理 三、Android Binder IPC 通信模型1、Client/Server/ServiceManager/驱动Binder与路由器之间的角色关系 2、Binder通信过程3、Binder通信中的…

Kibana安装、配置

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

如何利用 instructor 提高 RAG 的准确性和召回率

本文首发于博客 LLM 应用开发实践 RAG&#xff08;Retrieval Augmented Generation&#xff09;是一种检索增强生成技术&#xff0c;它利用大型语言模型来处理用户查询&#xff0c;RAG 技术的主要组成包括数据提取—embedding—创建索引—检索—排序&#xff08;Rerank&#xf…

智慧公厕:提升城市形象,为市民带来极致体验

智慧公厕是现代城市建设中不可或缺的一环&#xff0c;它不仅可以提升城市形象&#xff0c;还为市民提供更好的公厕体验。在这个快节奏的时代&#xff0c;人们对公共设施的要求也越来越高&#xff0c;智慧公厕的出现正好满足了市民们的需求。本文以智慧公厕源头厂家广州中期科技…

ThreadLocal全面解析

目录 一、ThreadLocal的介绍1、简介2、基本使用3、ThreadLocal与synchronized的区别 二、ThreadLocal的内部结构1、jdk早期设计2、JDK8设计3、内存泄露 三、ThreadLocal的核心方法源码1、set方法2、get方法3、initialValue方法4、withInitial方法5、remove方法6、子类Inheritab…

【MySQL入门到精通-黑马程序员】MySQL基础篇-约束

文章目录 前言一、概述二、案例三、外键约束总结 前言 本专栏文章为观看黑马程序员《MySQL入门到精通》所做笔记&#xff0c;课程地址在这。如有侵权&#xff0c;立即删除。 一、概述 概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。目的…

Flume 简介及基本使用

1.Flume简介 Apache Flume 是一个分布式&#xff0c;高可用的数据收集系统。它可以从不同的数据源收集数据&#xff0c;经过聚合后发送到存储系统中&#xff0c;通常用于日志数据的收集。Flume 分为 NG 和 OG (1.0 之前) 两个版本&#xff0c;NG 在 OG 的基础上进行了完全的重构…

雷电模拟器上使用第一个frida(四)第一个HOOK

经过上述三篇&#xff0c;已经可以使用python3.8.10编写代码&#xff0c;利用frida14.2.18和雷电模拟器9.0.60(9)&#xff0c;Android 9交互。 雷电模拟器上使用第一个frida&#xff08;一&#xff09;之安装-CSDN博客 雷电模拟器上使用第一个frida&#xff08;二&#xff09…

网络类型与数据链路层协议

目录 整体大纲图 一、网络类型 二、数据链路层协议 1、MA网络 2、P2P网络 1&#xff09;HDLC协议 2&#xff09;PPP协议 a、特点及其数据帧封装结构 b、组成及其工作过程 c、ppp会话流程及ppp验证 d、ppp配置命令 f、ppp mp 整体大纲图 一、网络类型 二、数据链路层…

【机器学习】sklearn降维算法PCA

文章目录 降维PCAsklearn中的PCA代码实践 PCA对手写数字数据集的降维 降维 如何实现降维&#xff1f;【即减少特征的数量&#xff0c;又保留大部分有效信息】 将那些带有重复信息的特征合并&#xff0c;并删除那些带无效信息的特征等等&#xff0c;逐渐创造出能够代表原特征矩…

计算机毕业设计 基于协同过滤算法的白酒销售系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

线性表的插入、删除和查询操作

线性表的插入、删除和查询操作 1、定义线性表 定义一个线性结构&#xff0c;有列表默认长度设置为50&#xff0c;列表数量 #include <stdio.h> #define MaxSize 50typedef int Element; typedef struct{Element data[MaxSize];int length; }SqList;2、顺序表插入 插入…

【算法训练-排序算法 一】【手撕排序】快速排序、堆排序、归并排序

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【手撕排序系列】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…