Codeforces Round 938 (Div. 3) A - F 题解

A. Yogurt Sale

题意:要购买n个酸奶,有两种买法,一种是一次买一个,价格a。一种是一次买两个,价格b,问买n个酸奶的最小价格。
题解:很容易想到用2a和b比较,判断输出即可。
代码:
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
const int maxn = 4e5 + 7 ;
inline ll read(){ll x = 0 , f = 1 ;char c = getchar() ;while(c > '9' || c < '0'){if(c == '-')f = -1 ;c = getchar() ;}while(c >= '0' && c <= '9'){x = x * 10 + c - '0' ;c = getchar() ;}return x * f ;
}
ll t , n , k , c , a[maxn] ;
ll head[maxn] , nxt[maxn] , ver[maxn] , cnt , ans ;void solve(){n = read() ;k = read() ;c = read() ;if(k * 2 <= c){cout << n * k << endl ;return ;}else{cout << (n / 2) * c + (n - (n / 2) * 2) * k << endl ;}
}int main(){t = read() ;while(t --){solve() ;}return 0 ;
}

B. Progressive Square

题意:给你n,c,d,你要生成n*n的矩阵,按照规则a_{i+ 1,j} = a_{i,j} + c , a_{i,j + 1} = a_{i,j} + d。给你n*n个数字,看看能否生成这样的矩阵并且包含所有数字。
题解:用最小数字开始枚举即可,n范围在500,轻松通过。
代码:
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
const int maxn = 1e6 + 7 ;
inline ll read(){ll x = 0 , f = 1 ;char c = getchar() ;while(c > '9' || c < '0'){if(c == '-')f = -1 ;c = getchar() ;}while(c >= '0' && c <= '9'){x = x * 10 + c - '0' ;c = getchar() ;}return x * f ;
}
ll t , n , k , c , a[maxn] ;
ll head[maxn] , nxt[maxn] , ver[maxn] , cnt , ans ;
ll b[550][550] ;
vector < ll > q ;
void solve(){q.clear() ;n = read() ;k = read() ;c = read() ;for(int i = 1 ; i <= n * n ; i ++){a[i] = read() ;}sort(a + 1 , a + n * n + 1) ;ll rt = a[1] ;b[1][1] = rt ;for(int i = 2 ; i <= n ; i ++){b[1][i] = b[1][i - 1] + c ;}for(int i = 2 ; i <= n ; i ++){for(int j = 1 ; j <= n ; j ++){b[i][j] = b[i - 1][j] + k ;}}for(int i = 1 ; i <= n ; i ++){for(int j = 1 ; j <= n ; j ++){q.push_back(b[i][j]) ;}}sort(q.begin() , q.end()) ;ll Rt = 0 ;for(int i = 1 ; i <= n * n ; i ++){if(q[Rt] != a[i]){cout << "NO\n" ;return ;}Rt ++ ;}cout << "YES" << endl ;
}int main(){t = read() ;while(t --){solve() ;}return 0 ;
}

C. Inhabitant of the Deep Sea

题意: 给你n个数字和k,每次怪兽都会按照攻击前面一次再攻击后面一次的顺序攻击,每次造成1滴血量伤害,问最多能击败多少个船。
题解:可以将k分解成两部分,然后枚举统计答案即可。
代码:
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
const int maxn = 1e6 + 7 ;
inline ll read(){ll x = 0 , f = 1 ;char c = getchar() ;while(c > '9' || c < '0'){if(c == '-')f = -1 ;c = getchar() ;}while(c >= '0' && c <= '9'){x = x * 10 + c - '0' ;c = getchar() ;}return x * f ;
}
ll t , n , k , c , a[maxn] ;
ll head[maxn] , nxt[maxn] , ver[maxn] , cnt , ans ;
vector < ll > q ;
void solve(){n = read() ;k = read() ;for(int i = 1 ; i <= n ; i ++){a[i] = read() ;}ll l = (k + 2 - 1) / 2 ;ll r = k / 2 ;ll rt = 1 ;ll ans = 0 ;while(l != 0){if(rt > n){break ;}if(l - a[rt] >= 0){l -= a[rt] ;ans ++ ;a[rt] = 0 ;rt ++ ;}else{a[rt] -= l ;l = 0 ;break ;}}rt = n ;while(r != 0){if(rt < 1){break ;}if(a[rt] == 0){break ;}if(r - a[rt] >= 0){r -= a[rt] ;ans ++ ;a[rt] = 0 ;rt -- ;}else{a[rt] -= r ;r = 0 ;break ;}}cout << ans << endl ;
}int main(){t = read() ;while(t --){solve() ;}return 0 ;
}

D. Inaccurate Subsequence Search

题意:给你一个数组a和数组b,长度分别为n和m,看看有多少组可以满足1<=l<=n - m + 1满足至少有k个相同的数字?
题解:可以用STL里的map来统计数组b,然后先用map统计1-m的数字有多少相同的,定义l = 1, r = m,然后每次让l++,r++,统计有多少个相同数字,直接统计答案即可。
代码:
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
const int maxn = 1e6 + 7 ;
inline ll read(){ll x = 0 , f = 1 ;char c = getchar() ;while(c > '9' || c < '0'){if(c == '-')f = -1 ;c = getchar() ;}while(c >= '0' && c <= '9'){x = x * 10 + c - '0' ;c = getchar() ;}return x * f ;
}
ll t , n , k , c , a[maxn] , b[maxn] ;
ll head[maxn] , nxt[maxn] , ver[maxn] , cnt , ans ;
vector < ll > q ;
void solve(){map < ll , ll > mp , p ;n = read() ;k = read() ;c = read() ;for(int i = 1 ; i <= n ; i ++){a[i] = read() ;}for(int i = 1 ; i <= k ; i ++){b[i] = read() ;mp[b[i]] ++ ;}ll sum = 0 , ans = 0 ;for(int i = 1 ; i <= k ; i ++){p[a[i]] ++ ;if(p[a[i]] <= mp[a[i]]){sum ++ ;}}if(sum >= c){ans ++ ;}ll l = 1 , r = k ;while(1){if(r >= n){break ;}if(p[a[l]] - 1 < mp[a[l]]){sum -- ;p[a[l]] -- ;}else{p[a[l]] -- ;}if(p[a[r + 1]] + 1 <= mp[a[r + 1]]){sum ++ ;p[a[r + 1]] ++ ;}else{p[a[r + 1]] ++ ;}if(sum >= c){ans ++ ;}l ++ ;r ++ ;}cout << ans << endl ;
}int main(){t = read() ;while(t --){solve() ;}return 0 ;
}

E. Long Inversions

题意:给你一个字符串s,可以选择一个k,每次修改i<=l<=i + k - 1,翻转里面所有的数字,将0变成1,将1变成0,目标是想要将序列全部变成1,。问能满足最大的k是多少。
题解:看到最大的k,先想到了二分,能否从小推大,但是发现不行,那么看到数据n<=5000,那么可以想到枚举即可,n^2logn可以通过,首先思考怎么看能否能将所有的数字变成1,很明显从前面到后面依次遍历,如果碰到了0,那么就翻转当前位置i到i + k - 1。那么现在的复杂度是n^3,很明显通过不了。那么就想到了数据结构,那么就想到用树状数组来维护。如果说当前为0,那么就让i<=j<=i + k - 1加1,如果说(a[i] + query(a[i]) mod 2) mod 2等于0,那么就区间增加1,如果说等于1那么就不修改,最后遍历一遍看看是否全为1即可。复杂度O(n^2logn)

代码:

#include<bits/stdc++.h>
#define ll long long
const int maxn = 5000 + 7 ;
using namespace std;
ll t , n , m , p , l , r , a[maxn] , tree[maxn] ;
char s[maxn];
inline ll read(){ll x = 0 , f = 1 ;char c = getchar() ;while(c > '9' || c < '0'){if(c == '-')f = -1 ;c = getchar() ;}while(c >= '0' && c <= '9'){x = x * 10 + c - '0' ;c = getchar() ;}return x * f ;
}
ll lowbit(ll x){return x & (-x) ;
}
void update(ll x , ll y){for( ;x <= n ; x += lowbit(x)){tree[x] += y ;}
}
ll Query(ll x){ll ans = 0 ;while(x != 0){ans += tree[x] ;x -= lowbit(x) ;}return ans ;
}
void solve(){n = read() ;scanf("%s" , s + 1) ;for(int i = 1 ; i <= n ; i ++) a[i] = s[i] - '0' ;for(int i = n ; i >= 1 ; i --){for(int j = 0 ; j <= n ; j ++){tree[j] = 0 ;}bool f = 0 ;for(int j = 1 ; j + i - 1 <= n ; j ++){ll res = (a[j] + (Query(j) % 2)) % 2 ;if(res == 0){update(j , 1) ;update(j + i , -1) ;}}for(int j = 1 ; j <= n ; j ++){ll res = (a[j] + (Query(j) % 2)) % 2 ;if(res == 0){f = 1 ;}}if(f == 0){cout << i << endl ;return ;}}cout << 1 << endl ;
}
int main()
{t = read() ;while(t --){solve() ;}return 0;
}
注:也不知道为什么,我一开始用线段树写T了5发,也不知道是我常熟大吗!

F. Unfair Game

题意:给你四个数字,分别代表1,2,3,4的数量,Alice和Bob在进行游戏,如果说所有的数字异或和不为0那么Alice赢,如果说是0那么Bob赢,Eve每次会去掉一个数字,每次都用最优的方式去掉数字,问最多Bob能获胜多少次。
题解:这个题其实很好想,首先可以想到4只要有那么就一定和1,2,3没有任何关系,因为无法组成0,那么就将4的数量单独拿出来看,再看1,2,3的数量,可以想到1和2可以和3抵消掉,然后就可以想出一种方法,就是将1,2,3的数量取min,然后加上4的数量除以2,是一种情况,再看如果说每个的数字是偶数的话,那么很明显比1,2,3抵消要更优,因为每个数字是偶数,如果说是第一种情况最多是2,但是第二种情况每次减2的话答案可以增加3。最后就是特殊的情况,比如1,2,3的数量一样,并且全是奇数,那么答案要加1。如果说三个数字都是奇数,那么答案也要加1。这个题就迎刃而解了。复杂度非常低!
代码:
#include<bits/stdc++.h>
#define ll long long
const int maxn = 5000 + 7 ;
using namespace std;
ll t , n , m , p , l , r , tree[maxn] ;
char s[maxn];
inline ll read(){ll x = 0 , f = 1 ;char c = getchar() ;while(c > '9' || c < '0'){if(c == '-')f = -1 ;c = getchar() ;}while(c >= '0' && c <= '9'){x = x * 10 + c - '0' ;c = getchar() ;}return x * f ;
}
ll a , b , c , d ;
void solve(){a = read() ;b = read() ;c = read() ;d = read() ;bool f = 0 ;if((a == b && b == c && a % 2 == 1) || ((a % 2 == 1) && (b % 2 == 1) && (c % 2 == 1))){f = 1 ;}ll res = (min(min(a , b) , c) + d / 2) ;ll Res = (a / 2) + (b / 2) + (c / 2) + (d / 2) + ((f == 1) ? 1 : 0) ;cout << max(res , Res) << endl ;
}                                                                                                                                                                                              
int main()
{t = read() ;while(t --){solve() ;}return 0;
}

喜欢作者的记得点赞收藏加关注哦~

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

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

相关文章

麻雀优化算法(Sparrow Search Algorithm)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 算法背景 麻雀算法&#xff08;Sparrow Search Algorithm, SSA&#xff09;是一种受自然界麻雀群体行为启发的优化算法。想象一下&#xff0c;一…

【MacOs】proxychains配置使用

一、开始 1. 安装proxychains 使用brew进行安装 brew install proxychains-ng没有homebrew的&#xff0c;可以使用该命令安装 /usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)"2. 配置代理配置文件 cd /opt/homeb…

day5 nest商业项目初探·一(java转ts全栈/3R教室)

背景&#xff1a;从头一点点学起太慢了&#xff0c;直接看几个商业项目吧&#xff0c;看看根据Java的经验&#xff0c;自己能看懂多少&#xff0c;然后再系统学的话也会更有针对性。先看3R教室公开的 kuromi 移民机构官方网站吧 【加拿大 | 1.5w】Nextjs&#xff1a;kuromi 移民…

专业140+总410+国防科技大学831信号与系统考研经验国防科大电子信息与通信,真题,大纲,参考书。

应群里同学要求&#xff0c;总结一下我自己的复习经历&#xff0c;希望对大家有所借鉴&#xff0c;报考国防科技大学&#xff0c;专业课831信号与系统140&#xff0c;总分410&#xff0c;大家以前一直认为国防科技大学时军校&#xff0c;从而很少关注这所军中清华&#xff0c;现…

Java 基于微信小程序的助农扶贫小程序

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

React - 你知道props和state之间深层次的区别吗

难度级别:初级及以上 提问概率:60% 如果把React组件看做一个函数的话,props更像是外部传入的参数,而state更像是函数内部定义的变量。那么他们还有哪些更深层次的区别呢,我们来看一下。 首先说props,他是组件外部传入的参数,我们知道…

鸿蒙实战开发-相机和媒体库、如何在eTS中调用相机拍照和录像

介绍 此Demo展示如何在eTS中调用相机拍照和录像&#xff0c;以及使用媒体库接口将图片和视频保存的操作。实现效果如下&#xff1a; 效果预览 使用说明 1.启动应用&#xff0c;在权限弹窗中授权后返回应用&#xff0c;进入相机界面。 2.相机界面默认是拍照模式&#xff0c;…

【第二十九篇】BurpSuite杂项综合

文章目录 Intruder模块URL编码Grep检索提取logger日志模块Intruder模块URL编码 假设我们需要对GET请求包中的URL目录进行爆破FUZZ: example.com/xxxx(文件名)Intruder模块会自动对我们的文件名字典进行URL编码 例如payload为1.txt时,burp对其进行URL编码并连接到example.c…

性能优化 - 你知道dns-prefetch有什么用吗

难度级别:中级及以上 提问概率:50% 我们在HTML文档里写一个script标签,为src属性指定Javascript文件网络地址,这是一件再平凡不过的事情。当浏览器加载HTML文档,加载到这个script标签的时候,就会去下载Javascript文件。而在下载之前,就…

携程旅行 abtest

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章…

使用 Jenkins、Gitlab、Harbor、Helm、k8s 来实现流水线作业

文章目录 一、流程二、Dockerfile 使用 Jenkins、Gitlab、Harbor、Helm、Kubernetes 来实现一个完整的持续集成和持续部署的流水线作业 一、流程 开发人员提交代码到 Gitlab 代码仓库通过 Gitlab 配置的 Jenkins Webhook 触发 Pipeline 自动构建Jenkins 触发构建构建任务&…

尚硅谷html5+css3(3)布局

1.文档流normal flow -网页是一个多层结构 -通过CSS可以分别为每一层设置样式 -用户只能看到最顶层 -最底层&#xff1a;文档流&#xff08;我们所创建的元素默认都是从文档流中进行排列&#xff09; <head><style>.box1 {background-color: blue;}/*它的父元…

C# + OpencvSharp4 错误信息收集

异常1&#xff1a; 初次使用&#xff0c;如下代码报错&#xff0c;OpenCvSharp.OpenCvSharpException:“imread failed.” Mat src Cv2.ImRead("Source.png", ImreadModes.Unchanged); 原因&#xff1a;检查Nuget包与OpencvSharp4库相关安装是否完整&#xff0c;…

系统架构评估_3.ATAM方法

架构权衡分析方法&#xff08;Architecture Tradeoff Analysis Method&#xff0c;ATAM&#xff09;是在SAAM的基础发展起来的&#xff0c;主要针对性能、实用性、安全性和可修改性&#xff0c;在系统开发之前&#xff0c;对这些质量属性进行评价和折中。 &#xff08;1&#x…

Unity2023使用sdkmanager命令行工具安装Android SDK

1&#xff0c;下载cmdline-tools&#xff0c;官网地址&#xff1a;https://developer.android.com/studio或者https://dl.google.com/android/repository/文件名 文件名对应版本名。例如文件名为commandlinetools-win-9862592_latest.zip 引用Android cmdline-tools 版本与其…

【网络】什么是RPC

RPC 是Remote Procedure Call的缩写&#xff0c;译为远程过程调用。是一个计算机通信协议。 1、为什么需要远程调用 在如何给女朋友解释什么是分布式这一篇文章中介绍过&#xff0c;为了提升饭店的服务能力&#xff0c;饭店从一开始只有一个负责所有事情的厨师发展成有厨师、切…

一种新兴的身份安全理念:身份结构免疫

文章目录 前言一、从身份管理到身份结构免疫二、身份结构免疫应用实践三、典型应用场景前言 随着组织的数字身份数量激增,基于身份的网络攻击活动也在不断增长。在身份优先的安全原则下,新一代身份安全方案需要更好的统一性和控制度。而在现有的身份管理模式中,组成业务运营…

OpenCV图像处理——基于OpenCV的ORB算法实现目标追踪

概述 ORB&#xff08;Oriented FAST and Rotated BRIEF&#xff09;算法是高效的关键点检测和描述方法。它结合了FAST&#xff08;Features from Accelerated Segment Test&#xff09;算法的快速关键点检测能力和BRIEF&#xff08;Binary Robust Independent Elementary Feat…

c语言:操作符

操作符 一.算术操作符: + - * % / 1.除了%操作符之外,其他的几个操作符可以作用与整数和浮点数,如:5%2.0//error. 2.对于操作符,如果两个操作数都为整数,执行整数除法而只要有浮点数执行的就是浮点数除法。 3.%操作符的两个操作数必须为整数。 二.移位操作符:<&…

SSL中的CA证书

目录 一、CA概述 二、数据加密 三、身份认证 一、CA概述 SSL如何保证网络通信的安全和数据的完整性呢&#xff1f;就是采用了两种手段&#xff1a;身份认证和数据加密。身份认证就需要用到CA证书。 CA是证书的签发机构&#xff0c;它是公钥基础设施&#xff08;Public Key In…