A. Array Coloring
考点:构造
思路:
将每一位的数字减去当前位的下标看是否同奇或者同偶,如果满足就是YES,否则就是NO。
复杂度:O(n)
python
import sys
import math
input = sys.stdin.readline
t = int(input())
for _ in range(t):
n=int(input())
a=list(map(int,input().split()))
b=[]
c=[]
for i in range(n):
z=(a[i]-i)%2
if z==0:
b.append(z)
else:
c.append(z)
if len(b)==n or len(c)==n:
print("YES")
else:
print("NO")
B. MEX Reordering
考点:构造
思路:
我们可以先把整个进行升序排序,可以直接找有多少个0和1,如果当一个0都没有的时候,不管你怎么分割,他都会有相同的1出现。同理当如果有大于2个0的时候,没有1的话,也会有同样相同的1。其余情况则都可以。
复杂度:O(n)
python
import sys
import math
input = sys.stdin.readline
t = int(input())
for _ in range(t):
n=int(input())
a=list(map(int,input().split()))
zero=0
one=0
for v in a:
if v==1:
one+=1
if v==0:
zero+=1
if zero==0 or (zero>=2 and one==0):
print("NO")
else:
print("YES")
C. Sorting Game
考点:博弈
思路:
将数组排序,然后跟原数组比较,如果当前的两个数字不相同,就记下当前下标的位置,如果数组长度是0的时候就是Bob赢,因为Alice进行不了任何操作。
复杂度:O(n)
python
import sys
import math
input = sys.stdin.readline
t = int(input())
for _ in range(t):
n=int(input())
s=list(input().strip())
ar=sorted(s)
a=[]
for i in range(n):
if s[i]!=ar[i]:
a.append(i+1)
if len(a)==0:
print("Bob")
else:
print("Alice")
print(len(a))
print(*a)
D1. Sub-RBS (Easy Version)
考点:构造
思路:
先找出第一个)的位置,并往后数数后面还有多少个(。如果(的数量>=2则一定有解,最大长度永远是n-2,否则直接输出-1。
复杂度:O(n)
python
import sys
import math
input = sys.stdin.readline
t = int(input())
for _ in range(t):
n=int(input())
s=input().strip()
r_1=-1
for i in range(n):
if s[i]==')':
r_1=i
break
left=0
if r_1!=-1:
for i in range(r_1+1,n):
if s[i]=='(':
left+=1
if left>=2:
print(n-2)
else:
print("-1")