首页 > 其他分享 >Codeforces Round #849 (Div. 4) 题解

Codeforces Round #849 (Div. 4) 题解

时间:2023-08-24 15:44:33浏览次数:41  
标签:AC Code ## 题解 复杂度 Codeforces 取反 mathcal Div

第一次打 $\text{Div.4}$,感觉体验还行,差一题 AK。

## A

直接使用 if 语句判断某个字符是否在字符串 $\text{codeforces}$ 中出现过,幼儿园小朋友都会做。

时间复杂度 $\mathcal{O}(T)$,空间复杂度 $\text{O}(1)$。

AC Code

## B

用两个变量 $x,y$ 记录当前走到哪里。若出现过 $x=1,y=1$ 的情况,输出 YES,否则输出 NO。

时间复杂度 $\mathcal{O}(Tn)$,空间复杂度 $\mathcal{O}(1)$。

AC Code

## C

在 $\text{while}$ 循环中判断头尾字符是否相等。若相等,则将头尾字符删去,并将答案加 $1$,否则退出循环。

时间复杂度 $\mathcal{O}(Tn)$,空间复杂度 $\mathcal{O}(n)$。

AC Code

## D

设 $f_i$ 表示 $a_1 \sim a_i$ 中不同字符的个数,$g_i$ 表示 $a_i \sim a_n$ 中不同字符的个数.

答案即为 $\max\limits_{1\le i \le n-1}{f_i+g_{i+1}}$。

时间复杂度 $\mathcal{O}(Tn)$,空间复杂度 $\mathcal{O}(n)$。

AC Code

## E

本题有几个关键的性质:

$1.$ 每个数至多被选择 $1$ 次。

$2.$ 若对一段连续的区间 $[l,r]$ 进行操作,那么最终结果是 $a_l=-a_l,a_{r+1}=-a_{r+1}$,并且其他位置均不改变。

这样一来,对于序列中的任意两个数,我们都能使他们同时取反。

统计序列中负数的数量,设为 $cnt$。

若 $cnt$ 为偶数,则直接将序列中所有负数取反。

若 $cnt$ 为奇数,且序列中最小的非负整数绝对值小于序列中最大的负数的绝对值,则将序列中所有负数取反,并将最小的非负整数取反。

否则,将除最大负数的所有负数取反。

这样做能保证答案最优。

时间复杂度 $\mathcal{O}(T n \log n)$,空间复杂度 $\mathcal{O}(n)$。时间复杂度较劣的原因是因为我使用了排序。

AC Code

## F

简单数据结构题。

考虑构造一个操作次数的差分数组 $b$。

对于每一个操作 $[l,r]$,很显然将 $b_l$ 加 $1$,$b_{r+1}$ 减 $1$。

对于每一个询问 $x$,$x$ 的操作次数即为 $\sum\limits_{i=1}^n$ $b_i$。若 $\sum\limits_{i=1}^n \le 5$,则暴力修改,并记录 $x$ 位置的答案。否则直接输出 $x$ 位置保留的答案。

用一个树状数组维护 $b$ 数组。

时间复杂度 $\mathcal{O}(Tn \log n)$,空间复杂度 $\mathcal{O}(n)$。

AC Code

## G1

这题怎么比 F 还简单很多啊。

转化一下题意。假设有一个 容量为 $c$ 的背包,并且有 $n$ 个物品,第 $i$ 个物品的体积为 $a_i+i$,价值为 $1$。

考虑做 0/1 背包,复杂度无法通过。注意到每个物品价值都为 $1$,所以贪心地选就可以了。

时间复杂度 $\mathcal{O}(Tn \log n)$,空间复杂度 $\mathcal{O}(n)$。

AC Code

## G2

赛后想出来一个做法,但貌似是错的,就不写题解了。

标签:AC,Code,##,题解,复杂度,Codeforces,取反,mathcal,Div
From: https://www.cnblogs.com/GaodeSean/p/17654279.html

相关文章

  • CF36D New Game with a Chess Piece 题解
    前言:都大半年没在洛谷上提交过题解了。SPOJ上有双倍经验,题号为SP7602。我看题解区的大佬们有的正经用博弈论做,有的打表,但是感觉没有讲得很形象,这篇题解将生动讲述打表做法,同时为了让大家在感性理解后,还可以理性理解,会附上证明(这部分参考了别的题解)。正文:Step1:打表找规律......
  • CF54C First Digit Law 题解
    题目传送门\(Solution\):一个比较简单的数位dp处理技巧加上一个暴力的dp。设\(p_i\)为区间\([l_i,r_i]\)中出现\(1\)开头的数的概率。考虑\(solve(x)\)函数为求出\([1,x]\)中开头为\(1\)的个数。显然低于\(x\)的位数的数是全部能取到的,这时候开头为\(1\)......
  • 题解 数数
    题目链接可持久化平衡树看上去很行的样子,但是我不会啊。。。先来考虑一个简化版的问题:求区间\([1,n]\)中\(\leH_i\)的元素个数。这显然是好做的,用权值树状数组就行。回到本题,显然:询问区间\([l,r]\)中\(\leH_i\)的个数,等价与区间\([1,r]\)的答案减去区间\([1,l-1]......
  • 国标视频云服务EasyGBS国标视频平台迁移服务器后无法启动的问题解决方法
    国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格......
  • P3742题解
    思路只需要让z串做到和y串一样,就得让y串每个字母(题意如此)均小于x串。所以只要x串有一项小于y串,那么就输出-1,否则输出y串。下面是核心代码:#include<bits/stdc++.h>usingnamespacestd;intn;stringx,y;intmain(){ cin>>n>>x>>y; for(inti=0;i<n;i++) { if(x[i]......
  • 【问题解决】容器部署MySQL的数据在docker commit导出的镜像中丢失
    问题起因最近公司有个甲方项目参加竞赛,要求在(基于kubeflow/arena)平台上部置应用,可以将MySQL打包在应用一起,也可以分开部署,没有提供volume相关的支持。大意是可以把初始好的数据直接拿到平台上。经过本人在Linux虚机中启动MySQL容器导入数据再dockercommit出镜像部署到平台......
  • Educational Codeforces Round 109 (Rated for Div. 2)
    B题没想到被坑了两次,极端情况明明也很好想,硬是WA了两发。C题很想之前做过的经典蚂蚁题,但是又不太一样,但分析之后,发现之后奇偶性相同才可能碰撞,那么分开处理,假如已经有相向而行,肯定是最快碰撞的,用一个栈维护即可,最后就是剩下的肯定是LLL...RRR将它们配对即可。#inclu......
  • 「题解」Codeforces 825G Tree Queries
    点权转边权,把边权设为两个端点的\(\min\),然后发现询问\(x\)的答案,就是询问\(x\)与所有黑点的虚树,边权的\(\min\)是多少。假设要判定答案是否\(\geqk\),那么就是询问\(x\)只经过\(\geqk\)是否能到达所有黑点,于是想到建立Kruskal重构树,那么\(x\)与所有黑点的LCA......
  • 题解 P8816 [CSP-J 2022] 上升点列
    P8816[CSP-J2022]上升点列题目大意给定\(n\)个点,你可以任意添加\(k\)个点,从中选择若干点使得序列中任意相邻两点间的欧几里得距离恰好为\(1\)而且横坐标、纵坐标值均单调不减。换言之,求二维最长上升子序列。solution:很容易想到动态规划,根据最长上升子序列的套路,可以......
  • P1830题解
    思路:利用桶存储轰炸区域,双重循环。在存储轰炸区域时将次数刷新,也就是pos[j][k]=i;。下面是核心代码:for(inti=1;i<=x;i++){ intx1,x2,y1,y2; cin>>x1>>y1>>x2>>y2; for(intj=x1;j<=x2;j++) { for(intk=y1;k<=y2;k++) { vis[j][k]++; pos[j][k]=i; } }......