• Codeforces Round 906 (Div. 2--ABC)


    A.Doremy's Paint 3

    题目

    一个元素全为整数的数组,如果满足相邻两个元素和相同,我们就认定此数组is good。给定一个长度为n的数组a,可以任意改变元素顺序,判定数组a是否is good。

    输入

    首行t测试数据数量,1\leq t \leq 100

    每组数据第一行n,数组长度2 \leq n \leq 100

    第二行数组a的n个数字,1 \leq a_{i} \leq 10^{5}

    输出

    "YES"或“NO”,判定a是否is good。

    解析

     相邻元素和相同,等价于数组中奇数位置元素相同,偶数位置元素相同。故数组中最多出现两种元素,即奇数位和偶数位数字不同的情况。同时奇数位数字出现个数最多比偶数位数字出现次数多一,否则组不成数组。故,只需遍历数组统计奇偶位数字出现次数即可,时间复杂度n\cdot t = 10^{4}

    代码

    1. T = int(input().strip())
    2. for t in range(T):
    3. n = int(input().strip())
    4. a = list(map(int, input().strip().split()))
    5. s = set(a)
    6. if len(s) > 2:
    7. print("NO")
    8. elif len(s) == 2:
    9. odd = a.count(a[0])
    10. even = n - odd
    11. if abs(odd - even) <= 1:
    12. print("YES")
    13. else:
    14. print("NO")
    15. else:#奇偶位数字相同
    16. print("YES")

    B.Qingshan Loves Strings

    题目

     一个字符串s,一个字符串t,由0和1组成。定义一个字符串is good需要满足相邻字符不同,如1或101或0101字符串is good。判断通过将t插入到s的任意位置,是否可以让s is good。

    输入

    首行t测试数据数量,1\leq t \leq 200

    每组数据第一行s长度n和t长度m,1 \leq n, m \leq 50

    第二行s

    第三行t

    输出

    YES or NO

    解析

     如果s不满足is good,说明s中有连续的1或0,能够将连续1分开的只有以0开头和结尾的t,能够将连续0分开的只有以1开头和结尾的t,故答案为YES的只有上述三种情况。时间复杂度粗略估计n \cdot t = 10^{4},绰绰有余。

    代码

    1. T = int(input().strip())
    2. def check(s):
    3. l = 1
    4. for c in s:
    5. if c == l:
    6. return False
    7. else:
    8. l = c
    9. return True
    10. for k in range(T):
    11. n, m = map(int, input().strip().split())
    12. s = input().strip()
    13. t = input().strip()
    14. if check(s): # 遗漏点
    15. print("YES")
    16. else:
    17. if check(t):
    18. if t[0] == t[-1] == "0" and s.count("00") == 0:
    19. print("YES")
    20. elif t[0] == t[-1] == "1" and s.count("11") == 0:
    21. print("YES")
    22. else:
    23. print("NO")
    24. else:
    25. print("NO")

    C.Qingshan Loves Strings 2

    题目

    字符串s由0和1组成,定义一个字符串is good需要满足:第一个与倒数第一个字符不同,第二个与倒数第二个不同,依次类推。 可以执行的操作只有一个,向s任意位置插入“01”字符串,判断字符串s是否能在300次以内的操作满足is good条件。

    输入

    首行t测试数据数量,1\leq t \leq 100

    每个测试样例首行为字符串s的长度n,1 \leq n \leq 100

    第二行字符串s

    输出

    对于每个样例,如果s不可能成为good,输出“-1”

    否则第一行输出操作个数p

    第二行输入插入“01”字符的位置,0表示插入s开头,其他数值i表示插入到第i个字符之后。

    解析

    依次对比字符串首位字符,如果不同,则去掉首位字符,查看得到的新字符串的首位。如果相同,两种情况,同为1,则要在开头添加“01”;同为“0”,则要在末尾添加“01”。依次判断保存添加结果即可,需注意插入操作对插入位置的影响,其他为模拟过程。

    代码

    1. from collections import deque
    2. def solve():
    3. n = int(input().strip())
    4. q = deque(input().strip())
    5. cnt0 = cnt1 = 0
    6. for c in q:
    7. if c == "1":
    8. cnt1 += 1
    9. else:
    10. cnt0 += 1
    11. if cnt0 != cnt1:
    12. print("-1")
    13. return
    14. res = list()
    15. d = 0
    16. while len(q) > 1:
    17. if q[0] == q[-1]:
    18. if q[0] == "0":
    19. q.append("0")
    20. q.append("1")
    21. res.append(n-d)
    22. else:
    23. q.appendleft("1")
    24. q.appendleft("0")
    25. res.append(d)
    26. n += 2
    27. while len(q) > 1 and q[0] != q[-1]:
    28. q.pop()
    29. q.popleft()
    30. d += 1
    31. print(len(res))
    32. for r in res:
    33. print(r, end=" ")
    34. print()
    35. K = int(input().strip())
    36. for k in range(K):
    37. solve()

     尾

    这次B提交错误两次,C未做完没提交,跟上次差不多。将原题目贴出来,B提交错误的两次是没理解对题目意思,英文的阅读理解还是有一定问题的。

    比如

     可以插入多次这种字眼会忽略掉,还有

    开始以为1,101,0101是一个完整地数字,后来才发现这是三个例子1和101和0101,愁了半天。还是要慢慢读题目,然后看题目给的例子,最后有些题目末尾有作者写的note,一定要好好看,确认自己理解无误。不然提交错了,白白扣分。不用着急做后边的题,反正也不会,争取不提交错误就行。

     CF407——>CF692

  • 相关阅读:
    【JavaScript】用echarts绘制饼图
    2023秋招——大数据研发工程师提前批一面
    python中sklearn库在数据预处理中的详细用法,及5个常用的Scikit-learn(通常简称为 sklearn)程序代码示例
    springboot自定义starter集成controller、Dao
    配置全面升级!NANK南卡骨传导运动耳机Runner CC 3新品首发
    【Python 实战基础】Pandas如何计算最大值最小值所在的行
    C++标准模板(STL)- 类型支持 (定宽整数类型)(INT8_C,INTMAX_C,UINT8_C,UINTMAX_C,格式化宏常量)
    matlab中矩阵点乘和乘的区别(超级简单)
    spark ui的job数,stage数以及task数
    Linux编程基础案例:第3章用户与用户组管理
  • 原文地址:https://blog.csdn.net/qq_41500251/article/details/134136274