codeforces 11/10

这是是第一题的链接
这道题的数据范围给的很小,我们只需要模拟一下,就可以过了
代码如下:

    for i in range(int(input())):
    x,a,b=map(int,input().split())
    count1,count2=0,0
    c=list(input()*1000)
    for i in range(1000):
      if count1==a and count2==b:
        print("YES")
        break
      elif c[i]=="S":count2-=1
      elif c[i]=="W":count1-=1
      elif c[i]=="N":count2+=1
      elif c[i]=="E":count1+=1
    else:
      print("NO")

这是是第二题的链接
这道题就是一个找规律的问题,因为第一个元素总是c值,所以先判断c值与n的大小关系,如果c值大于等于n值,说明点都在0~n-1范围外,需要交换n-1次,而对于间隔为0的一系列数字。
因为其数组所有元素值都相等,没有单调性质,所以只有n-2到n-1时才是可以变为置换的,而对于其他情况,只要求出来在0~n-1有多少点,最后用n值一减即可。下面代码中(n-c+b-1)//b
这段代码为什么要加b-1呢?
-> 我们要求这段区间内的点的个数,并且已经事先知道这些点的间隔是是b了,在知道区间左端点必定是一个满足条件的值,我们加b-1是怕万一余数不为零的时候,我们在运算"//"符号
时就可以把余数那部分的那个满足条件的值加上,保证了数据的准确。

附上代码:

for _ in range(int(input())):
    n, b, c = map(int, input().split())
    
    if n <= c:
        print(n)
    
    elif b == 0 and (c + 1) < n - 1:
        print("-1")
    
    elif b == 0:
        print(n-1)
    else:
        y = ((n - c + b - 1) // b)
        print(n - y)

这是本来的代码,如果看不懂,可以参考下面的代码:

for _ in range(int(input())):
    n,a,b = map(int,input().split())
    if n <= b:
        print(n)
    elif a == 0 and b < n-2:
        print("-1")
    elif a == 0:
        print(n-1)
    else:
        aa,bb = divmod(n - b ,a)
        if bb!=0:
            aa += 1
        print(n-aa)
posted @ 2024-11-11 23:11  fafatadie  阅读(1)  评论(0编辑  收藏  举报