Codeforces Round #789 (Div. 2) A-C

A

题目

https://codeforces.com/problemset/problem/1677/A

题解

思路

知识点:模拟。

(比较显然,不写了)

时间复杂度 \(O(nlogn)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>

using namespace std;

int a[100];

int main(){
std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t;
cin>>t;
while(t--){
int n;
cin>>n;
for(int i = 0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int cnt = 0;
bool ok = false;
for(int i = 0;i<n-1;i++){
if(a[i] == a[i+1] || !a[i]){
ok = true;
break;
}
}
for(int i = 0;i<n;i++){
if(a[i]) cnt++;
}
cout<<(cnt+!ok)<<'\n';
}
return 0;
}

B

题目

https://codeforces.com/problemset/problem/1678/B1

https://codeforces.com/problemset/problem/1678/B2

题解

思路

知识点:贪心。

对于给定偶数长度的0/1串,奇数子串与其他串(不论奇偶的其他)的分界点有且仅有一个位于某一对中间。比如,\(111001100011\) 划分以后变成 \(11,10,01,10,00,11\) ,发现 \(111\) 的末尾 \(1\) 出现在 \(10\) 中,\(000\) 的首部 \(0\) 出现在 \(10\) 中。因此我们可以通过按对(即两个两个不相交)遍历,若遇到一次 \(01\) 或 \(10\) 则操作次数加 \(1\) 。

与此同时,我们发现若修改一处 \(01\) 或 \(10\) 可以修改成 \(00\) 或 \(11\) ,从而被前段或者后段的 \(00\) 或 \(11\) 吸收不改变总段数,因此可以将修改等价认为直接删除这段 \(01\) 或 \(10\) ,即在程序中不考虑这种情况对总数影响,只需要记录 \(00\) 或 \(11\) 的连续成段情况、特别地,如果 \(0/1\) 串本身没有 \(00\) 或 \(11\) 的对,或者说全串由 \(01\) 或 \(10\) 组成,那么它们可以自成唯一一段互相吸收,需要特判。

时间复杂度 \(O(n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>

using namespace std;

int main(){
std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t;
cin>>t;
while(t--){
int n;
cin>>n;
string s;
cin>>s;
int op = 0,cnt = 0;
char pre = '?';
for(int i = 0;i<n;i+=2){///两两配对
if(s[i] != s[i+1]) op++;///操作次数+1
else{
if(pre != s[i]) cnt++;///不同数字,段数+1
pre = s[i];///更新段数字
}
}
cout<<op<<' '<<max(1,cnt)<<'\n';///如果没有00/11吸收01/10,那么01/10可以自成一段
}
return 0;
}

C

题目

https://codeforces.com/problemset/problem/1677/A

题解

思路

知识点:DP,枚举。

注意到 \(a<b<c<d\) ,可以考虑枚举 \(b,c\) 两个点,用 \(a,d\) 分别在 \([1,b-1]\) 和 \([c+1,n]\) 的区间匹配。

匹配条件是 \(p_a < p_c \and p_b >p_d\) ,考虑用数组 \(cnt[i][j]\) 表示满足 \(p_x \leq j , x \in [1,i]\) 的 \(x\) 个数。于是 \(a\) 的匹配个数是 \(cnt[b-1][p[c]]\) ,\(d\) 的匹配个数是 \(cnt[n][p[b]] - cnt[c][p[b]]\) 。因此,对于一组 \(b,c\) 可以得到 \(cnt[b-1][p[c]] \cdot (cnt[n][p[b]] - cnt[c][p[b]])\) 的组数,枚举 \(b,c\) 累加即可。

时间复杂度 \(O(n^2)\)

空间复杂度 \(O(n^2)\)

代码

#include <bits/stdc++.h>

using namespace std;

int p[5007],cnt[5007][5007];//注意初始化

int main(){
std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t;
cin>>t;
while(t--){
int n;
cin>>n;
for(int i = 1;i<=n;i++){
cin>>p[i];
}
for(int i = 1;i<=n;i++){///预处理cnt[i][j] 为 [1,i] 中小于等于 j 的数字个数
for(int j = 1;j<=n;j++) cnt[i][j] = cnt[i-1][j];///传递上个区间
for(int j = p[i];j<=n;j++) cnt[i][j]++;///j从p[i]开始都大于等于i,遍历+1
}
///枚举b,c,以此为准求[1,b-1]和[c+1,d]间合法a,d个数
long long ans = 0;
for(int b = 2;b<=n-2;b++){
for(int c = b+1;c<=n-1;c++){
ans += 1LL * cnt[b-1][p[c]] * (cnt[n][p[b]] - cnt[c][p[b]]);
}
}
cout<<ans<<'\n';
}
return 0;
}

Codeforces Round #789 (Div. 2) A-C的更多相关文章

  1. Codeforces Round #789 (Div. 2)

    题集链接 A. Tokitsukaze and All Zero Sequence 题意 Tokitsukaze 有一个长度为 n 的序列 a. 对于每个操作,她选择两个数字 ai 和 aj (i≠j ...

  2. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  3. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  4. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  5. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  6. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  7. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  8. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  9. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

随机推荐

  1. Book2Notion:将豆瓣图书信息同步到Notion的Chrome插件

    背景 前几天写了一个python脚本从豆瓣爬数据然后保存到Notion,被身边同学吐槽使用起来太麻烦,而且也不是所有人都会Python(原话是充满了码农版"何不食肉糜").正好最近 ...

  2. 终极套娃 2.0|云原生 PaaS 平台的可观测性实践分享

    某个周一上午,小涛像往常一样泡上一杯热咖啡 ️,准备打开项目协同开始新一天的工作,突然隔壁的小文喊道:"快看,用户支持群里炸锅了 -" 用户 A:"Git 服务有点问题, ...

  3. 攻防世界-MISC:János-the-Ripper

    这是攻防世界MISC高手进阶区的题目: 点击下载附件一,解压后得到一个没有后缀的文件,老规矩用010editor打开,发现存在一个flag.txt文件 用foremost分离一下: flag.txt被 ...

  4. XCTF练习题---WEB---backup

    XCTF练习题---WEB---backup flag:Cyberpeace{855A1C4B3401294CB6604CCC98BDE334} 解题步骤: 1.观察题目,打开场景 2.打开以后发现是 ...

  5. 《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)

    1.简介 前面宏哥一连几篇介绍如何通过开源jar包Log4j.jar.log4j2.jar和logback实现日志文件输出,Log4j和logback确实很强大,能生成三种日志文件,一种是保存到磁盘的 ...

  6. .NET混合开发解决方案5 WebView2运行时与分发应用

    系列目录     [已更新最新开发文章,点击查看详细] 发布使用Microsoft Edge WebView2的应用程序时,客户端计算机上需要安装WebView2运行时,可以安装自动更新的Evergr ...

  7. 详解Fiddler Classic过滤、重放、转发HTTP请求

    更多干货文章,更多最新文章,欢迎到作者主博客 菜鸟厚非 一.简介 今天介绍一下 Fiddler Classic 对 HTPP 的过滤.重放.转发操作,这在开发中,尤其在微服务中调试中是经常用到的功能, ...

  8. 微信新菜单类型 article_id 设置教程

    前不久, Senparc.Weixin SDK 跟随微信更新的步伐,上线了新的素材管理接口,其中也涉及到了 article_id 类型的自定义菜单接口. 本文将演示如何使用新的菜单类型. 官方文档传送 ...

  9. Python3获取5000个元素的单字符表

    技术背景 此前考虑过一个问题,有没有办法获取到python里面所有定义好的单字符的表,比如我们获取5000个不一样的单字符,但是常用的chr(number)的方法里面包含了太多的非字母条目,比如缩进换 ...

  10. 739. Daily Temperatures - LeetCode

    Question 739. Daily Temperatures Solution 题目大意:比今天温度还要高还需要几天 思路:笨方法实现,每次遍历未来几天,比今天温度高,就坐标减 Java实现: p ...