Codeforces Round #838 (Div. 2) A-C题解

news2025/1/16 16:52:00

cf比赛链接

目录

A. Divide and Conquer

题意:

思路:

代码:

B. Make Array Good

题意:

思路:

代码:

C. Binary Strings are Fun(什么疑惑题面)

题意:首先的两个定义:

思路:

代码:


A. Divide and Conquer

题意:

给你n个数,如果这n个数的和为偶数,那么这个数组是“好的”,否则我们可以对他的任意一个数执行一次操作:使任意一个数变成他的[\frac{a_i}{2}].问你至少需要进行几次操作(可能是0),才可以使这个数组变成“好的”。

思路:

首先把所有数组的指加起来,如果是偶数就直接输出0,如果不是的话就说明要进行操作,

因为执行操作后要保证删去的和是一个奇数,那么我们删掉的数是一个奇数的时候退出即可

那么对于每一个数,循环进行操作,当删去的数是一个奇数的时候就退出保存答案,然后取答案的最小值即可。

代码:


#include<cstdio>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include<vector>
#include<queue>
#include<map>
#define sc_int(x) scanf("%d", &x)
#define sc_ll(x) scanf("%lld", &x)
#define pr_ll(x) printf("%lld", x)
#define pr_ll_n(x) printf("%lld\n", x)
#define pr_int_n(x) printf("%d\n", x)
#define ll long long 
using namespace std;

const int N=1000000+100;
int n ,m,h;
ll s[N];




void slove()
{
	cin>>n;
	ll k=0;
	for(int i =1;i<=n;i++)
	{
		cin>>s[i];
		k+=s[i];
	}
	if(k%2==0){
		cout<<0<<endl;
		return ;
	}
			int res=1e9;
			for(int i =1;i<=n;i++)
			{
				int sum=0;
				int k=s[i];
				while(1)
				{
				if((k-s[i])%2)break;
				s[i]/=2;
				sum++;
				}
				res=min(sum,res);
			}
		cout<<res<<endl;
	
}

int main()
{
	int t;
	sc_int(t);
	while(t--)slove();
	
	return 0;
}

B. Make Array Good

题意:

给你n个数,你可以给每一个a_i扩大0-a_i范围内任意的数,问你每一个数扩大多少可以使任意的两个数a_i,a_j的最大值是他们的最小值的倍数。

思路:

因为可以证明这样的序列是一定存在的,那么就说明排序后相邻两个数的倍数最少可以是2,那么我们先从小到大排序,对于排序之后的数对于第一个数不处理,从第二个数开始,把他变成前一个数的两倍(因为一定存在,那么一定可以变),这样子再把处理的数存到下标之中,之后按下标输出结果即可。

代码:



#include<cstdio>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include<vector>
#include<queue>
#include<map>
#define sc_int(x) scanf("%d", &x)
#define sc_ll(x) scanf("%lld", &x)
#define pr_ll(x) printf("%lld", x)
#define pr_ll_n(x) printf("%lld\n", x)
#define pr_int_n(x) printf("%d\n", x)
#define ll long long 
using namespace std;

const int N=1000000+100;
int n ,m,h;
ll s[N];

struct lk{
	int x;
	int i;
	int res;
}cnt[N];
map<int,int>q;
bool cmp(lk x ,lk y ){return x.x<y.x;}

void slove()
{
	q.clear();
	cin>>n;
	ll ma=0;
	for(int i=1;i<=n;i++)
	{
		cin>>cnt[i].x;
		cnt[i].i=i;
	}
	sort(cnt+1,cnt+1+n,cmp);
	for(int i =1;i<=n;i++)
	{
		if(i==1)
		{
			cnt[i].res=0;
			cnt[i].x+=cnt[i].res;
			q[cnt[i].i]=cnt[i].res;
		}
		else {
			cnt[i].res=cnt[i-1].x-(cnt[i].x%cnt[i-1].x);
			cnt[i].x+=cnt[i].res;
			q[cnt[i].i]=cnt[i].res;			
		}
	}
	cout<<n<<endl;
	for(int i =1;i<=n;i++)
	cout<<i<<" "<<q[i]<<endl;
}

int main()
{
	int t;
	sc_int(t);
	while(t--)slove();
	
	return 0;
}


 

C. Binary Strings are Fun(什么疑惑题面)

题意:首先的两个定义:

一:字符串的好的定义:给一个长度为m奇数的字符串,如果对于所有的奇数i(1<=i<=m)a_i是前i个字符出现最多的那个字符,那么这个字符串就是好的.

二:字符串s的拓展(长度为m),如果有一个长为2m-1的字符串k,并且满足k_2_i-_1=s_i(1<=i<=m)

那么k就是s的一个拓展。如

 1011011就不是1001的拓展。

现在给你一个字符串s问你它的的好的拓展的情况的和是多少(对998244353取模),就是求每字符串的前缀的良好的拓展的情况之和。

思路:

是一个dp问题,用dp[N]代表前n项的字符串的答案,那么我们可以分析:对于所有的情况,如果满足s_i!=s_i-_1,那么dp[i]一定为1(假如s_i是1s_i-_1是0那么前i-1项的和一定是0比1多,然后因为后面要满足1比0多,所以至少要两个0才能满足条件,即只有一种情况),那么如果不相等就一定是dp[i-1]*2了,然后每次取一下模就可以了

代码:


#include<cstdio>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include<vector>
#include<queue>
#include<map>
#define sc_int(x) scanf("%d", &x)
#define sc_ll(x) scanf("%lld", &x)
#define pr_ll(x) printf("%lld", x)
#define pr_ll_n(x) printf("%lld\n", x)
#define pr_int_n(x) printf("%d\n", x)
#define ll long long 
using namespace std;

const int N=1000000+100,mod=998244353;
int n ,m,h;
char  s[N];
ll dp[N];


void slove()
{
	cin>>n;
	cin>>s+1;
	dp[1]=1;
	ll res=1;
	for(int i=2;i<=n;i++)
	{
		if(s[i]!=s[i-1])
		dp[i]=1;
		else 
		dp[i]=(dp[i-1]*2)%mod;	
		res=(res+dp[i])%mod;
	}
	cout<<res<<endl;
}

int main()
{
	int t;
	sc_int(t);
	while(t--)slove();
	
	return 0;
}

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

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

相关文章

PG::Sumo

nmap -Pn -p- -T4 --min-rate1000 192.168.170.87 nmap -Pn -p 22,80 -sCV 192.168.170.87 查看80端口的页面&#xff0c;没有什么有用的信息 尝试路径爆破&#xff0c;发现了/cgi-bin目录&#xff0c;就想到了HTB中的Shocker靶机。 继续爆破 wfuzz -c -z file,/usr/share/…

03. SQL注入漏洞基础

03. SQL注入漏洞基础 SQL注入漏洞基础&#xff08;上&#xff09; /01 SQL注入的原理 SQL注入原理 SQL注入产生的原因 当Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理&#xff0c;那么攻击者就可以构造特殊的SQL语句&…

泓德基金:以超融合构建生产及灾备环境,承载 O32 等关键业务系统

案例亮点 承载 O32、TA、估值等基金行业关键业务系统生产与灾备环境。 POC 期间对超融合应用承载能力以及数据库支撑能力分别进行验证&#xff0c;性能与稳定性均满足需求。 超融合首先作为灾备资源池部署&#xff0c;稳定运行一年后&#xff0c;转为生产资源池&#xff0c;并…

高企认定没专利?专利评分低?如何评分?

众所周知&#xff0c;高企申报是一场“持久战”&#xff0c;申报知识产权、归集研发费用、科技成果转化等工作都需要一定的准备时间。其中&#xff0c;知识产权的获取所需要的时间是最长的(两年左右)&#xff0c;对高新认定评分的影响也是最大的。因此&#xff0c;知识产权的研…

来聊一聊 ElasticSearch 最新版的 Java 客户端

可能不少小伙伴都注意到了&#xff0c;从 ElasticSearch7.17 这个版本开始&#xff0c;原先的 Java 高级客户端 Java High Level REST Client 废弃了&#xff0c;不支持了。老实说&#xff0c;ElasticSearch 算是我用过的所有 Java 工具中&#xff0c;更新最为激进的一个了&…

Unity中的Mask组件增加DrawCall的原因

Unity中的Mask组件增加DrawCall的原因 简介 常说mask组件不要常用&#xff0c;因为会增加drawcall&#xff0c;增加性能消耗&#xff1b;当然作为一个需要背八股文的同学而言&#xff0c;仅仅知道会增加性能消耗是不够的&#xff0c;所以这里简单看下其原理。 首先看下在Uni…

监控系列(三)自定义DM采集项(exporter)+主机监控+grafana展示

一、概括 本篇不涉及达梦数据库搭建&#xff0c;操作环境需提前准备prometheus以及grafana的搭建&#xff0c;请跳转到前文查看 监控系列&#xff08;一&#xff09;DM8PrometheusGrafana搭建 监控系列&#xff08;二&#xff09;Dem对接Prometheusgrafana显示 自定义的采集…

基于数字孪生技术的智慧变电站Web3D可视化系统

今天为大家分享一个采用 数维图 的 Sovit3D 构建轻量化 3D 可视化场景的案例——数字孪生智慧变电站三维可视化系统。多维度呈现变电站场景&#xff0c;实现变电站运行态势的实时监测&#xff0c;运维设备、控制系统和信息系统的互联互通。加强变电站设备的全状态感知力与控制力…

03-MySQL查询数据

目录 DQL语言 单表查询 AS子句 DISTINCT关键字的使用 WHERE条件语句 逻辑操作符 比较操作符 BETWEEN范围查询 LIKE模糊查询 使用IN进行范围查询 NULL空值条件查询 连接查询&#xff08;多表查询&#xff09; INNER JOIN内连接 等值和非等值的连接查询 外连接 JOIN对比…

49.Python的while循环

49.Python的while循环 文章目录49.Python的while循环1. 什么是循环2. 什么是while循环3.课题导入4.while循环语法5.while循环执行流程6. if和while的区别7.课堂练习1. 什么是循环 【循环的百度释义】 特指运行一周而回到原处&#xff0c;再转。 反复地连续地做某事。 【循环…

新征程-猿如意试用一波!

猿如意传送门&#xff08;必带&#xff09; 猿如意下载地址&#xff1a;猿如意-程序员的如意兵器,工具代码,一搜就有 猿如意使用了几次了&#xff0c;今天来想分享一下我对于猿如意的使用感受吧&#xff01;&#xff01; 先说结论&#xff1a;值得每个程序员都在电脑里安装一…

MySQL的基础架构简述

文章目录一、一条SQL查询语句是如何执行的1、连接器2、查询缓存3、分析器4、优化器5、执行器一、一条SQL查询语句是如何执行的 开篇先上基本架构示意图&#x1f917;&#xff1a; 大体来说&#xff0c;MySQL可以分为 Server 层和存储引擎两部分。 Server 层包括连接…

大一作业HTML网页作业 HTML校园篮球网页作业(12个页面)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

前沿系列--简述Diffusion Model 扩散模型(无代码版本)

文章目录前言why扩散简述how如何扩散逆向过程小结流程训练过程预测过程总结前言 OK&#xff0c;今天的话&#xff0c;我们来搞一下这个扩散模型&#xff0c;来对这个玩意进行一个简单的了解&#xff0c;因为这个也是目前还算比较前沿的东西&#xff0c;也挺有用的&#xff0c;…

CSAPP-Lab2 BombLab解析

文章目录ReferencePhase1Phase2Phase3Phase4Phase5Phase6Part1Part2Part3Part4Part5Part6SecretBombSummaryReference GDB Command Reference - disassemble command&#xff1a;怎么使用GDB进行反汇编调试GDB X CommandGDB and Debugging&#xff1a;GDB上手教程和如何进行de…

大一作业HTML网页作业 HTML CSS制作二十四节气网页

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

背包问题:蛇优化算法(Snake Optimizer,SO)求解背包问题(Knapsack Problem,KP)提供Matlab代码

一、背包问题 1.1背包问题描述 背包问题(Knapsack Problem&#xff0c;KP)是一种重要的组合优化问题&#xff0c;在生活的许多领域都有着十分广泛的应用。背包问题可以描述为&#xff1a;给定一个背包和n种物品&#xff0c;其中&#xff0c;背包的容量为VVV &#xff0c;第i …

Linux tar报错 无法 stat: 没有那个文件或目录 tar: 由于前次错误,将以上次的错误状态退出

解决方法 解决方式&#xff1a;-czf 的f必须在最后&#xff0c;因为f标识指定压缩后的文件名&#xff0c;f后面紧跟着的字符串就是你所指定的压缩后的文件名&#xff0c;所以f必须在后面 我记忆的方法&#xff1a;czf 吃早饭 举例&#xff1a;压缩多个文件、目录,压缩后得到的文…

Go语言GOPATH是什么

一、GOPATH的概念 GOPATH 是 Go 语言中使用的一个环境变量&#xff0c;它使用绝对路径提供项目的工作目录&#xff08;也称为工作区&#xff09;, 是存放 Golang 项目代码的文件路径, GOPATH 适合处理大量 Go语言源码、多个包组合而成的复杂工程。 工作目录是一个工程开发的相对…

【机器学习】特征独立性检验-特征太多删特征-删who呢

总结 MvTest独立性分析方法——检验数值型特征与label是否有关系&#xff0c;删除与label无关&#xff08;独立&#xff09;的特征&#xff1b;corr协方差函数 相关性分析——找到数值型特征与数值型特征之间相关性高的数值型特征&#xff0c;然后删除&#xff08;相关性高的数…