codeforce E - Binary Inversions题解
题目:
给你一个01串,现在你可以(或者不用)选取其中一个元素进行一次反转操作0-1,1-0;从而使得串中的逆序对个数最多。
题目链接:codeforce origin problem
思路:
1. 如何统计逆序对的个数?
- 从后向前扫描,定义zero,记录0的个数,如果遇到1,则逆序对增加的个数就等于的此时zero。
点击查看代码
vector<int>a;
ll f(decltype(a)& d)
{
ll zero = 0, sum = 0;
rfor(i, d.size() - 1, 0)
{
//cout << d[i] << " ";
if ( d[i] == 0 )
zero++;
else sum += zero;
}
return sum;
}
2.如何进行一次反转使得逆序对个数最多?
我们考虑0-1反转,让逆序对数量更多,则应该让下标最小的0filp为1,这样子,逆序对个数最多。
我们考虑1-0反转,让逆序对数量更多,则应该让下标最小的1filp为0,这样子,逆序对个数最多。
AC代码
//注意事项:记得开longlong,避免溢出
// 其次,不用经过反转01,可能已经是最大的了,需要先做记录
vector<int>a;
ll f(decltype(a)& d)
{
ll zero = 0, sum = 0;
rfor(i, d.size() - 1, 0)
{
//cout << d[i] << " ";
if ( d[i] == 0 )
zero++;
else sum += zero;
}
return sum;
}
void solve()
{
ll n;
cin >> n;
a.resize(n);
ifor(i, 0, n - 1)
{
cin >> a[i];
}
ll res;
res = f(a);
ifor(i, 0, n - 1)
{
if ( a[i] == 0 )
{
a[i] = 1;
ll s1 = f(a);
res = max(s1, res);
a[i] = 0;
break;
}
}
rfor(i, n-1, 0)
{
if ( a[i] == 1 )
{
a[i] = 0;
ll s1 = f(a);
res = max(s1, res);
a[i] = 1;
break;
}
}
cout << res<<endl;
a.clear();
}
int main(int args, char** argv)
{
/*ios::sync_with_stdio(false);
cin.tie(nullptr);
cin.tie(nullptr);*/
long t;
cin >> t;
while ( t-- )
{
solve();
}
return 0;
}
codeforce E - Binary Inversions题解的更多相关文章
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- CF949E Binary Cards 题解
题面 首先发现:一个数最多会出现1次: 然后深入推出:一个数不会既用它又用它的相反数: 这样就可以依次考虑每一位了: 如果所有的数都不含有这一位,那么就直接把所有的数除以2 如果含有,那么就减去这一位 ...
- 【CF1436C】Binary Search 题解
原题链接 题意简介 要求有多少种 n 的排列,能够通过二分法正确地找到放在 pos 处的数字 x. 答案对 1e9+7 取模.n<=1000. 采用的二分法如下图: 思路分析 首先,这个排列中有 ...
- Codeforces #698 (Div. 2) E. Nezzar and Binary String 题解
中文题意: 给你两个长度为 \(n\) 的01串 \(s,f,\)有 \(q\) 次询问. 每次询问有区间 \([\ l,r\ ]\) ,如果 \([\ l,r\ ]\) 同时包含\(0\)和\(1\ ...
- Period of an Infinite Binary Expansion 题解
Solution 简单写一下思考过程,比较水的数论题 第一个答案几乎已经是可以背下来的,在此不再赘述 考虑我们已经知道了\((p,q)\),其中\((p \perp q) \wedge (q \per ...
- C#版 - 226. Invert Binary Tree(剑指offer 面试题19) - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - 2 ...
- LeetCode编程训练 - 折半查找(Binary Search)
Binary Search基础 应用于已排序的数据查找其中特定值,是折半查找最常的应用场景.相比线性查找(Linear Search),其时间复杂度减少到O(lgn).算法基本框架如下: //704. ...
- [Leetcode Week14]Maximum Binary Tree
Maximum Binary Tree 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/maximum-binary-tree/description/ ...
- 【题解搬运】PAT_A1020 树的遍历
题目 Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder an ...
- 算法与数据结构基础 - 二叉树(Binary Tree)
二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...
随机推荐
- Fluentd直接传输日志给MongoDB副本集 (replset)
官方文档地址:https://docs.fluentd.org/output/mongo_replset td-agent版本默认没有包含out_mongo插件,需要安装这个插件才能使用 使用的是td ...
- 4_Spring
一. Spring Spring的基本组成: 1.最完善的轻量级核心框架. 2.通用的事务管理抽象层. 3.JDBC抽象层. 4.集成了Toplink, Hibernate, JDO, and iBA ...
- Mysql编程中遇到的小错误
我在mysql中创建的数据库表语句为如下 create table grade (id int not null, name varchar(255), desc varchar(255), prim ...
- 2022-08-05-欢迎使用_Typecho
layout: post cid: 1 title: 欢迎使用 Typecho slug: start date: 2022/08/05 14:21:51 updated: 2022/08/05 14 ...
- 后端框架的学习----mybatis框架(3、配置解析)
3.配置解析 1.核心配置文件 2.环境配置(environment) 3.属性(properties) 可以通过properties属性来实现引用配置文件 这些属性可以在外部进行配置,并可以进行动态 ...
- 算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
一.名称 动态规划法应用 二.目的 1.贪婪技术的基本思想: 2.学会运用贪婪技术解决实际设计应用中碰到的问题. 三.要求 1.实现基于贪婪技术思想的Prim算法: 2.实现基于贪婪技术思想的Dijk ...
- 齐博x1如何录制阿里等第三方直播流
暂时只支持windows录制,可以在你本地电脑进行录制体验.点击下面的网址,下载录制程序文件,直接解压到任何一个目录都可以.里边同时包含自建直播服务器的功能,不用自建直播流的话,就可以忽视相关配置即可 ...
- 动词时态=>4.将来时态和过去将来时态构成详解
将来时态构成详解 使用助动词will构成的将来时态 一般将来时态 与一般过去时态相反(时间上) 如果说 一般过去,我们将其当做一张照片 从这张照片当中,我们无法得知 动作什么时候开始 什么时候结束 只 ...
- awk模式pattern
awk模式pattern 再来回顾下awk的语法 awk [option] 'pattern[action]' file ... awk是按行处理文本,刚才讲解了print动作,现在讲解特殊的patt ...
- 如何免安装使用 Python?推荐 17 个在线的 Python 解释器!
作者:Al Sweigart 译者:豌豆花下猫@Python猫 英文:https://inventwithpython.com/blog/2022/10/30/17-online-python-ide ...