Codeforces Round 920 (Div. 3)

A

n=int(input())

for _ in range(n):
    x1,y1=map(int,input().split())
    x2,y2=map(int,input().split())
    x3,y3=map(int,input().split())
    x4,y4=map(int,input().split())
    if  x1==x3:
        x2,x3=x3,x2
        y2,y3=y3,y2
    elif x1==x4:
        x2,x4=x4,x2
        y2,y4=y4,y2
    print(int(abs(y1-y2)*abs(x1-x3)))

B

 找出所有cnt_1=1需要换成0,cnt_0=0需要换成1的个数

如果可以交换,那么两两交换每次可以改变两个位置,一定比操作一次,只改变一个位置好

不能交换时,再进行添加和删除

res=(min(cnt_1,cnt_2)+max(cnt_1,cnt_0)-min(cnt_1,cnt_2))

m=int(input())
for _ in range(m):
    n=int(input())
    a=list(input())
    b=list(input())
    cnt_1=0
    cnt_0=0
    for i in range(n):
        if a[i]=='1' and b[i]=='0':
            cnt_1+=1
        elif a[i]=='0' and b[i]=='1':
            cnt_0+=1
    
    print(max(cnt_0,cnt_1))

C

模拟

m=int(input())
for _ in range(m):
        
    n,f,a,b=map(int,input().split())

    s=[0]+list(map(int,input().split()))
    x=0
    for i in range(1,n+1):
        if (s[i]-s[i-1])*a>=b:
            f-=b
            if f<=0:
                x=1
                break      
        else:
            f-=(s[i]-s[i-1])*a
            if f<=0:
                x=1
                break
        
    if x==0:print("YES")
    else:print("NO")

D

排序之后,贪心的每次选a最小和b最大,或者a最大或者b最小

对于两个排序好的序列,两个序列中最大的差值一定是取双方序列的两端

即a最小和b最大,或者a最大或者b

from collections import deque

P=int(input())
for _ in range(P):
    n,m=map(int,input().split())
    a=list(map(int,input().split()))
    b=list(map(int,input().split()))

    a.sort()
    b.sort()
    x=deque()
    y=deque()

    for i in range(n):
        x.append(a[i])
    for i in range(m):
        y.append(b[i])

    res=0
    while len(x)>0:
        if abs(x[0]-y[len(y)-1])>abs(y[0]-x[len(x)-1]):
            res+=abs(x[0]-y[len(y)-1])
            x.popleft()
            y.pop()
        else:
            res+=abs(y[0]-x[len(x)-1])
            y.popleft()
            x.pop()
    print(res)
    
    

你可能感兴趣的:(算法,机器学习,人工智能)