首页 > 其他分享 >Imbalanced Arrays

Imbalanced Arrays

时间:2024-07-20 15:06:56浏览次数:13  
标签:存在 那么 数列 Arrays 一个 绝对值 Imbalanced 考虑

还没有仔细看官方题解和洛谷题解,重新做的时候看一下有没有什么可以吸收的

说一下我的做法:首先看到第二个条件,不难想出\(i\)和\(-i\)只有可能选一个,此时观察样例,以及发现\(b\)刚好有\(n\)个数,所以不难想到最终\(b\)的构造方案是由\(1\) ~ \(n\)的每一个数或其相反数组成的,且每个数刚好有一个;接下来先证明其他情况都可以转换为这个情况,然后给出构造方案

如果对于某一种合法的情况,存在绝对值相等的数,那么由鸽巢原理,一定存在一个\(i∈[1,n]\),使得\(b\)中没有任何一个数的绝对值为\(i\),考虑\(b\)中绝对值离\(i\)最近的数(有可能由两个,一个绝对值大于\(i\),另一个绝对值小于\(i\),有对称性不妨考虑绝对值小于\(i\)的数),无论这个数有多个还是一个(注意如果这个数有多个,那么这个数对应\(b\)中的数一定符号相同),我们将一个它移动到\(i\),显然仍然符合答案;而我们可以通过重复以上操作来将其变成我们要的方案

上面描述太抽象了,举个例子

1 1 -2 -2 5 6

那么取\(i=3\),考虑\(|-2|=2\),将一个\(-2\)移动至\(-3\)(也就是绝对值变成\(3\)),数列变成1 1 -2 -3 5 6,再取\(i=4\),数列变成1 1 -2 -4 5 6,重复,最终数列会变成1 2 -3 -4 5 6

接下来给出构造方案:考虑特殊元素,先考虑\(n\)对应哪一个\(a\),如果是\(n\),那么肯定存在一个\(a\)的值为\(n\),如果是\(-n\),那么肯定存在一个\(a\)的值为\(0\),显然这两个不能同时存在,也不可能都不存在,于是填\(n\)还是\(-n\)是唯一确定的,然后删除对应的\(a\);然后考虑数学归纳法,如果我们已经填好了\([i+1,n]\)了,那么对于\(i\),如果我们选择\(i\),那么就存在一个\(a\)为\(n-\)已经填了的负数的个数,如果选择\(-i\),那么就存在一个\(a\)为已经填了的正数的个数,显然这两个不能相等(否则的话已经填了的数为\(n\),显然不可能),也不能都不存在,于是填\(i\)和\(-i\)也是确定的

可以想一下实现,具体见CF代码,比较简单

标签:存在,那么,数列,Arrays,一个,绝对值,Imbalanced,考虑
From: https://www.cnblogs.com/dingxingdi/p/18313137

相关文章

  • java数组之数组工具类——Arrays的使用
    一、Arrays工具类简述    在java的类库中有许多现成的已经封装好的方法,可以供开发人员使用,比如我们之前学的二分法查找或者快速排序等。所以在实际的开发中,我们是不用自己编写这些常用的方法的。那么在常用的数组方法在哪里的?java作为面向对象的语言,所有方法都会封装......
  • 深入解析`Arrays.asList`的用法与潜在陷阱
    引言在Java编程中,Arrays.asList是一个常用的工具方法,用于将数组转换为List。尽管其使用简单,但在实际应用中存在一些潜在的陷阱和误解。本文将深入探讨Arrays.asList的用法、其底层实现机制以及常见的陷阱,辅之以数据和实际案例分析。Arrays.asList的基本用法Arrays.asLis......
  • Arrays,Object,String,StringBuffer和常用工具类汇总
    Arrays[数组操作方法:排序,查找,替换,转换,复制]排序将数组升序排序:Arrays.sort(数组);查找数组中想查找的数字的索引:Arrays.binarysearch(数组,想查找的数字(例如3));替换将数组中的元素全部用x替换:Arrays.fill(数组,x);Arrays.fill(数组,下标y,下标z,x);//y-z下标的元素替换为x......
  • [题解]CF1223F Stack Exterminable Arrays
    CCF出的原题观摩一下。思路首先可以用一个Trie来维护。在这里对本文中的一些变量做一下说明。\(p\)表示当前维护的Trie中,指向的元素编号。\(t_i\)表示在Trie中编号为\(i\)的元素在原序列中的值。\(f_i\)表示在Trie中编号为\(i\)的元素在Trie中的父节点。......
  • How to get all subarrays from an array by using JavaScript All In One
    HowtogetallsubarraysfromanarraybyusingJavaScriptAllInOneJavaScript动态生成其所有的子数组算法difficulty:Medium/难度:中等solutionsdemos//双指针???//functionnumberOfSubarrays(nums:number[],k:number):number{//letcount=0......
  • Python - Arrays and Numpy Arrays
    Mostprogramminglanguagesprovideadatastructurecalledarrays.InPython,arrayisapackageanditisdifferentfrom“core”pythonlists.    Thesyntaxforcreatinganarray. DifferencesbetweenNumpyArraysandArrays PythonPredefi......
  • [AGC001D] Arrays and Palindrome
    题意有长度为\(n\)的字符串\(S\),与\(a,b\)两个序列。满足\(\suma_i=n,\sumb_i=n\)。若满足\(S\)的以下子段都为回文串:最前面的\(a_1\)个字符,以及紧接着的\(a_2\)个字符...最前面的\(b_1\)个字符,以及紧接着的\(b_2\)个字符...则\(S\)的所有字符......
  • Java-集合类-Arrays.asList()和subList使用需要注意的大坑
    Arrays.asList和subList使用需要注意的大坑一、Java-集合类-Arrays.asList()大坑1、不可修改列表大小&&原始数组与列表共享数据2、对于基本类型数组的使用限制两个错误案例wrong1wrong2二、Java-集合类-list.subList注意事项大坑1、ConcurrentModificationException2......
  • LeetCode 2956. Find Common Elements Between Two Arrays
    原题链接在这里:https://leetcode.com/problems/find-common-elements-between-two-arrays/description/题目:Youaregiventwo 0-indexed integerarrays nums1 and nums2 ofsizes n and m,respectively.Considercalculatingthefollowingvalues:Thenumberof......
  • 使用Arrays.asList()的坑
    背景在将数组转为list的时候,一般会使用到Arrays.asList()这个方法,但是在对转化后的list进行add操作的时候出现了java.lang.UnsupportedOperationException的报错原因Arrays.asList()方法只是将数组转换为一个固定长度的列表,它不支持增删操作。研究源码发现,它生成的ArrayLis......