首页 > 其他分享 >[AGC001D] Arrays and Palindrome

[AGC001D] Arrays and Palindrome

时间:2024-06-16 22:10:47浏览次数:15  
标签:字符 Palindrome 奇数 Arrays 可以 AGC001D 序列 个字符 回文

题意

有长度为 \(n\) 的字符串 \(S\),与 \(a, b\) 两个序列。

满足 \(\sum a_i = n, \sum b_i = n\)。

若满足 \(S\) 的以下子段都为回文串:

  • 最前面的 \(a_1\) 个字符,以及紧接着的 \(a_2\) 个字符...
  • 最前面的 \(b_1\) 个字符,以及紧接着的 \(b_2\) 个字符...

则 \(S\) 的所有字符相等。

现在告诉你长度为 \(m\) 的 \(a\) 任意排列的结果。

试确定 \(b\) 的长度与方案。

Sol

考虑形式化这个东西。

连边表示相连的两个字符相等,可以发现实际上回文的限制可以连一系列的边。

若要使得可以确定所有字符相等,则边数至少为 \(n - 1\)。

假设所有回文子段都为偶数,显然边数为 \(2 \times \lfloor \frac{n}{2} \rfloor\)。

注意到若回文的子段长度为奇数,可以当作少了一条边。

因此显然两个序列里奇数的个数不会超过 \(2\)。

这样可以将不合法的情况判掉。

手玩一下可以发现,若 \(a_i = b_i\),只需要将 \(b_i\) 平移一格就能全部对上了。

而且这样两个度数为 \(1\) 的点都在两侧,十分美观。

可以想到考虑给 \(b_1 = a_1 + 1, b_n = a_n - 1\),来对 \(b\) 序列平移。

注意到这样的话会导致中间的奇数的 \(a_i\) 中间留出的字符无法被联通。

很容易就能想到直接把奇数的两段放在最左边和最右边,仔细想想是对的。

标签:字符,Palindrome,奇数,Arrays,可以,AGC001D,序列,个字符,回文
From: https://www.cnblogs.com/cxqghzj/p/18251362

相关文章

  • Java-集合类-Arrays.asList()和subList使用需要注意的大坑
    Arrays.asList和subList使用需要注意的大坑一、Java-集合类-Arrays.asList()大坑1、不可修改列表大小&&原始数组与列表共享数据2、对于基本类型数组的使用限制两个错误案例wrong1wrong2二、Java-集合类-list.subList注意事项大坑1、ConcurrentModificationException2......
  • LeetCode 409 Longest Palindrome All In One
    LeetCode409LongestPalindromeAllInOneLeetCode409最长回文算法题解Solutions//MapfunctionlongestPalindrome(s:string):number{constmap=newMap();letlen=0;for(leti=0;i<s.length;i++){if(map.has(s[i])){//配对,消元......
  • 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......
  • 慎用 Arrays.asList
    Java8提供的Stream流式处理大大减少了集合类各种操作(投影、过滤、转换)的代码量,用起来非常香,所以在实际业务开发中,我们常常会把原始的数组转换为List类数据结构,使得其可以用上Stream流操作。Arrays.asList方法应该是各位最常用的数组一键转换为List的方法了,但这个方法......
  • SystemVerilog -- 2.6 Data Types ~ SystemVerilog Dynamic Arrays
    SystemVerilogDynamicArraysDynamicArrays是一个unpackedArrays,其大小可以在运行时设置或更改。因此与静态数组完全不同,静态数组的大小是在数组声明期间预先确定的。DynamicArrays的默认大小为零,直到由构造函数设置。new()SyntaxDynamicArray的尺寸由空方括号指定。[][d......
  • SystemVerilog -- 2.6 Data Types ~ SystemVerilog Unpacked Arrays
    SystemVerilogUnpackedArraysUnpackedArrays用于引用在变量名称之后声明的维度。UnpackedArrays可以是固定大小的数组、动态数组、关联数组、队列。SingleDimensionalUnpackedArraymoduletb;bytestack[8];//depth=8,1bytewidevariableinitial......
  • SystemVerilog -- 2.5 Data Types ~ SystemVerilog Packed Arrays
    SystemVerilogPackedArraysSystemVerilog中有两种类型的数组-packedarray和unpackedarray。packedarray用于引用在变量名称之前声明的维度。bit[3:0]data;//Packedarrayorvectorlogicqueue[9:0];//unpackedarraypackedarray保证表示为一组......
  • SystemVerilog -- 2.4 Data Types ~ SystemVerilog Arrays
    SystemVerilogArraysSystemVerilog在通过不同类型的数组构建复杂的数据结构方面提供了很大的灵活性。静态阵列动态阵列关联数组队列StaticArrays静态数组是指其大小在编译时间之前已知的数组。在下面显示的示例中,声明了一个8位宽的静态数组,为其分配了一些值并循环访问......
  • C. Matching Arrays
    链接:https://codeforces.com/problemset/problem/1896/C洛谷:https://www.luogu.com.cn/problem/CF1896C这题疑似有点水了?为什么还有绿题hhhh思路:结构体+排序首先对a,b各自排序:取b的下x和a的上x比较,如果可以(指ai>bi),那么进入二阶段;如果不行,那么直接输出no。二阶段:取b的上n-x和a的......