2 条题解

  • 0
    @ 2024-9-12 17:23:25
    N=200008
    tr=[0 for i in range(N*4)]
    ssum=[0 for i in range(N*4)]
    lsum=[0 for i in range(N*4)]
    rsum=[0 for i in range(N*4)]
    b=[[0 for i in range(20001)]for i in range(200)]
    a=[0 for i in range(20001)]
    def up(x):
        tr[x]=tr[x<<1]+tr[x<<1|1]
        ssum[x]=max(max(ssum[x<<1],ssum[x<<1|1]),rsum[x<<1]+lsum[x<<1|1])
        lsum[x]=max(lsum[x<<1],tr[x<<1]+lsum[x<<1|1])
        rsum[x]=max(rsum[x<<1|1],tr[x<<1|1]+rsum[x<<1])
    def build(x,l,r):
        if(l==r):
            tr[x]=a[l]
            ssum[x]=lsum[x]=rsum[x]=tr[x]
            return
        mid=(l+r)>>1
        build(x<<1,l,mid)
        build(x<<1|1,mid+1,r)
        up(x)
    def query(x,l,r,L,R):
        if(l<=L and R>=r):
            return ssum[x]
        mid=(l+r)>>1
        ret=-100000
        if(L<=mid):
            ret=max(query(x<<1,l,mid,L,R),ret)
        if(R>mid):
            ret=max(query(x<<1|1,mid+1,r,L,R),ret)
        return ret
    n,m=map(int,input().split())
    for i in range(1,m+1):
        a[i]=-100000
    for i in range(1,n+1):
        b[i]=[0]+list(map(int,input().split()))
    for i in range(1,n+1):
        for j in range(1,m+1):
            a[j]=max(a[j],b[i][j])
    build(1,1,m)
    print(query(1,1,m,1,m))
    

    线段树大法好

    • @ 2024-9-12 17:29:06

      不够高端,建议再加个结构体和懒标记(虽然不知道有没有和有没有用)

    • @ 2024-9-14 15:00:52

      建议加强数据,暴力水过🚀️

  • -1
    @ 2024-9-14 15:28:15
    a=[[0 for i in range(19)] for j in range(19)]
    flag=0
    x=0
    y=0
    def out() :
        for i in range(19) :
            print(a[i])
    def check() :
        for i in range(0,15) :
            for j in range(0,15) :
                num=a[i][j]+a[i][j+1]+a[i][j+2]+a[i][j+3]+a[i][j+4]
                sun=a[i][j]+a[i+1][j]+a[i+2][j]+a[i+3][j]+a[i+4][j]
                if num==5 or sun==5 : return 1
                if num==-5 or sun==-5 : return -1
        for i in range(4,19) :
            for j in range(0,15) :
                num=a[i][j]+a[i-1][j+1]+a[i-2][j+2]+a[i-3][j+3]+a[i-4][j+4]
                if num==5 : return 1
                if num==-5 : return -1
        for i in range(0,15) :
            for j in range(0,15) :
                num=a[i][j]+a[i+1][j+1]+a[i+2][j+2]+a[i+3][j+3]+a[i+4][j+4]
                if num==5 : return 1
                if num==-5 : return -1
    while(1) :
        if(flag==0) : print("请黑方落子",end="")
        else : print("请白方落子",end="")
        x,y=map(int,input().split())
        if(a[x][y]!=0) : continue
        if(flag==0) : a[x][y]=1
        else : a[x][y]=-1
        out()
        ans=check()
        if ans==1  :
            print("黑赢",end="")
            break
        elif ans==-1 :
            print("白赢",end="")
            break
        flag=(flag+1)%2
        
    
    • 1

    信息

    ID
    339
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    110
    已通过
    39
    上传者