zoukankan      html  css  js  c++  java
  • 2维矩阵前缀和技巧题目

    #下面这一段用一个txt来保存input的信息来模拟input.最后提交代码时候删除这一段即可.
    a9999=open('1.txt','r')
    def input():
        return a9999.readline()
    #结束.
    
    '''
    一闪一闪亮晶晶,满天都是小星星,牛牛晚上闲来无聊,便躺在床上数星星。
    牛牛把星星图看成一个平面,左上角为原点(坐标为(1, 1))。现在有n颗星星,他给每颗星星都标
    上坐标(xi,yi),
    表示这颗星星在第x行,第y列。
    现在,牛牛想问你m个问题,给你两个点的坐标(a1, b1)(a2,b2),表示一个矩形的左上角的点坐标
    和右下角的点坐标,请问在这个矩形内有多少颗星星(边界上的点也算是矩形内)。
    '''
    #2维矩阵前缀和.用O(N)的速度来得到.
    a=[[0,0,1,1],[1,1,1,1],[0,1,1,0],[1,0,0,1]]
    b=[[0 for i in range(len(a[0]))] for i in range(len(a))]
    tmp=[0]
    for i in a:
        tmp.append(tmp[-1]+i[0])
    
    tmp.pop(0)
    
    for i in range(len(b)):
        for j in range(len(b[0])):
            #b[i][j]表示矩阵a[i][j]到左上角组成的矩阵一共有多少个1.
            if i==0:
                b[i][j]=sum(a[i][:j+1])
            elif j==0:
                b[i][j]=tmp[i]
            else:
             b[i][j]=b[i-1][j]+b[i][j-1]+a[i][j]-b[i-1][j-1]
    
    print(b)
    View Code

     具体写下来就是:

    #下面这一段用一个txt来保存input的信息来模拟input.最后提交代码时候删除这一段即可.
    a9999=open('1.txt','r')
    def input():
        return a9999.readline()
    #结束.
    
    '''
    一闪一闪亮晶晶,满天都是小星星,牛牛晚上闲来无聊,便躺在床上数星星。
    牛牛把星星图看成一个平面,左上角为原点(坐标为(1, 1))。现在有n颗星星,他给每颗星星都标
    上坐标(xi,yi),
    表示这颗星星在第x行,第y列。
    现在,牛牛想问你m个问题,给你两个点的坐标(a1, b1)(a2,b2),表示一个矩形的左上角的点坐标
    和右下角的点坐标,请问在这个矩形内有多少颗星星(边界上的点也算是矩形内)。
    '''
    #2维矩阵前缀和.用O(N)的速度来得到.
    
    
    
    
    num=int(input())
    #读入星星数据
    a=[[0 for i in range(5)] for i in range(5)]
    for i in range(num):
        a1=[int(a) for a in input().split()]
        a[a1[0]][a1[1]]=1
    
    
    
    
    
    #做前缀动态规划
    
    b=[[0 for i in range(len(a[0]))] for i in range(len(a))]
    tmp=[0]
    for i in a:
        tmp.append(tmp[-1]+i[1])
    
    tmp.pop(0)
    
    for i in range(1,len(b)):
        for j in range(1,len(b[0])):
            #b[i][j]表示矩阵a[i][j]到左上角组成的矩阵一共有多少个1.
            if i==1:
                b[i][j]=sum(a[i][:j+1])
            elif j==1:
                b[i][j]=tmp[i]
            else:
             b[i][j]=b[i-1][j]+b[i][j-1]+a[i][j]-b[i-1][j-1]
    print(a)
    print(b)
    wenti=int(input())
    for i in range(wenti):
        a1=[int(a) for a in input().split()]
    
        print(b[a1[2]][a1[3]]-b[a1[0]-1][a1[3]]-b[a1[2]][a1[1]-1]+b[a1[0]-1][a1[1]-1])
    View Code
  • 相关阅读:
    MVC5管道处理模型
    http协议下:为什么请求与响应会做到准确误的对应。不会出现请求与响应的错乱
    修改 IIS 队列长度
    修改 ASP.NET 请求队列的限制
    Windows性能查看器:系统的性能信息(I/O,IIS最大连接数,Sql) ,以及解决 asp.net IIS 一二百多用户并发
    详解 ASP.NET异步
    [C#]获得线程池中活动的线程数
    一个http请求就是一个线程吗,java的服务是每收到一个请求就新开一个线程来处理吗
    IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的...
    ASP.NET MVC 线程和并发
  • 原文地址:https://www.cnblogs.com/zhangbo2008/p/9231352.html
Copyright © 2011-2022 走看看