2 条题解

  • 0
    @ 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
        
    
    • 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

    信息

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