首页 > 其他分享 >codeforce E - Binary Inversions题解

codeforce E - Binary Inversions题解

时间:2022-11-24 08:34:49浏览次数:73  
标签:Binary 对个 题解 ll zero res Inversions s1 逆序

题目:

给你一个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;
}

标签:Binary,对个,题解,ll,zero,res,Inversions,s1,逆序
From: https://www.cnblogs.com/Archer-lian/p/16920475.html

相关文章

  • 199. Binary Tree Right Side View
    Giventhe root ofabinarytree,imagineyourselfstandingonthe rightside ofit,return thevaluesofthenodesyoucanseeorderedfromtoptobottom.......
  • 老杜mysql34题解答
    1取得每个部门最高薪水的人员名称mysql>selectename,sal,deptnofromemp->wheresalin->(selectmax(sal)fromempgroupbydeptno);2找出哪些人......
  • 题解 LGP7914【[CSP-S 2021] 括号序列】
    solution最终括号串形如:(***(...)(...)***(...)),或者((...)(...)***(...)***),或者((...)(...)***(...)),就是说中间可有可无,两边只留一个。令\(st_{l,r}\)表示\([l,r......
  • python http.server 的测试和常见问题解决方法
    一.测试准备先分别写一个简单httpserver 和一个html文件。html文件只是引入了jquery, 后面测试用<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">......
  • UVA-422 题解
    正文♦最坏时间复杂度:\(\mathcal{O}(l^3)\)由于\(1\leql\leq100\),\(\mathcal{O}(l^3)\)可以过。输入字符阵,枚举\(i,j\)指向二维数组中的字符,向八个方向暴力搜索。......
  • 题解 LGP4211【[LNOI2014]LCA】
    problem一棵树,多次给定\(l,r,z\)询问\(\sum_{l\leqi\leqr}dep_{lca(i,z)}\),允许离线,\(n\leq50000\)。solution转换:这个\(dep_u\)的定义为\(u\)到根节点的点数......
  • ABap smartforms 预览重叠问题解决
     smartfoms在预览时总会出现文字重叠的现象,但是实际打印却又正常。如下图。 通过对sap源码的修改可以修正此问题。如下显示就正常了。......
  • P4464 [国家集训队] JZPKIL 题解
    NOIP前三天,感觉绝对复习不完了的gtm1514认为已经没有什么好害怕的了,于是做起了数学题。因为摆了大烂所以只有一道。P4464[国家集训队]JZPKIL题意不再赘述。下午看......
  • CF1392H ZS Shuffles Cards 题解
    linkDescription有\(n\)张数字牌以及\(m\)张鬼牌,有一个不可重集合\(S\),初始为空。不断执行以下操作:抽出一张牌,如果为数字牌,则加入\(S\)并移除。如果为鬼牌,如果......
  • Public NOIP Round #3(Div. 1) 题解
    T2:先判\(1,n\)有连边的情况,也就是说明最短路一定是\(1\)直接走到\(n\)。特判掉\(k=1,n=2\)的情况,这是无解的。那么如果\(k\ge2\)就令\(1,n\)都为\(U\),其余随......