zoukankan      html  css  js  c++  java
  • Python 短码研究笔记 Day 1

    P1000 A+B Problem

    print(sum(map(int,input().split())))
    

    P1002 过河卒

    n,m,x,y=map(int,input().split())
    def c(a,b):return (a==x or b==y or abs(x-a)+abs(y-b)!=3) and not(a<0 or b<0 or (a==x and b==y))
    f=[[0]*(m+1)for i in range(n+1)];f[0][0]=1
    for i in range(n+1):
     for j in range(m+1):f[i][j]+=c(i-1,j)*f[i-1][j];f[i][j]+=c(i,j-1)*f[i][j-1]
    print(f[n][m])
    

    P1018 乘积最大

    n,k=map(int,input().split());s,f=input(),[[0]*(k+1)for i in range(n+1)]
    for i in range(1,n+1):f[i][0]=int(s[:i])
    for l in range(1,k+1):
      for i in range(l+1,n+1):
        for j in range(l,i):f[i][l]=max(f[i][l],f[j][l-1]*int(s[j:i]))
    print(f[n][k])
    

    P1044 栈

    n=int(input());f=[0]*25;f[1]=1
    for i in range(2,n+1):f[i]=f[i-1]*(4*i-2)//(i+1)
    print(f[n])
    

    多组数据的简易玩法

    exec(int(input())*"a,b=map(int,input().split());print((b-a%b)%b);")
    

    sort/sorted 函数

    sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

    用于返回一个排序的序列

    sorted(iterable, key=None, reverse=False)  
    
    >>>example_list = [5, 0, 6, 1, 2, 7, 3, 4]
    >>> result_list = sorted(example_list, key=lambda x: x*-1)
    >>> print(result_list)
    [7, 6, 5, 4, 3, 2, 1, 0]
    

    zip 函数

    用于将多个序列打包成一个

    >>> p=[1,2,3]
    >>> q=[1,4,9]
    >>> for i in zip(p,q): print(i)
    
    (1, 1)
    (2, 4)
    (3, 9)
    >>> zip(*zip(p,q))
    <zip object at 0x0349EC28>
    >>> a1,a2=zip(*zip(p,q))
    >>> a1
    (1, 2, 3)
    >>> a2
    (1, 4, 9)
    >>> 
    

    P2249 查找 - 二分查找

    I=lambda:map(int,input().split())
    n,m=I();a=list(I());b=I()
    for t in b:
      l,r=0,n-1
      while l<r:
        mid=(l+r)//2
        if a[mid]<t: l=mid+1
        else: r=mid
      if a[l]==t:print(l+1,end=' ')
      else: print(-1,end=' ')
    

    利用字典进行替代

    I=lambda:map(int,input().split())
    n,m=I();a=list(I());b=I();x={};j=0;
    for i in a:
      j+=1;
      if i not in x:x[i]=j;
    for i in b:print(x[i] if i in x else -1,end=' ')
    

    P2708 硬币翻转

    从前有很多个硬币摆在一行,有正面朝上的,也有背面朝上的。正面朝上的用1表示,背面朝上的用0表示。现在要求从这行的第一个硬币开始,将前若干个硬币一起翻面,问如果要将所有硬币翻到正面朝上,最少要进行这样的操作多少次?

    利用结论,最坏情况下要 (n) 次,如果两个相邻相同则省 (1) 次,如果最后一个是 (1) 的话再省一次

    s=input();n=len(s);a=n-(s[n-1]=='1')
    for i in range(1,n):a-=s[i]==s[i-1]
    print(a)
    

    P1141 01迷宫

    有一个仅由数字(0)(1)组成的(n imes n)格迷宫。若你位于一格0上,那么你可以移动到相邻(4)格中的某一格(1)上,同样若你位于一格1上,那么你可以移动到相邻(4)格中的某一格(0)上。

    你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身)。

    写 BFS 使用 List 的 insert 和 pop 即可

    n,m=map(int,input().split())
    mp=['' for i in range(n+1)]
    for i in range(1,n+1): mp[i]=' '+input()
    vis=[[0]*(n+1) for i in range(n+1)]
    dx=[1,0,-1,0]
    dy=[0,1,0,-1]
    color=0
    ans={}
    def bfs(x,y):
      qx=[x];qy=[y]
      vis[x][y]=color
      global count
      while qx:
        px=qx.pop();py=qy.pop()
        count+=1
        for i in range(4):
          nx=px+dx[i];ny=py+dy[i]
          if 1<=nx<=n and 1<=ny<=n and not vis[nx][ny] and mp[px][py]!=mp[nx][ny]:
            qx.insert(0,nx)
            qy.insert(0,ny)
            vis[nx][ny]=color
    for i in range(1,n+1):
      for j in range(1,n+1):
        if not vis[i][j]:
          color+=1
          count=0
          bfs(i,j)
          ans[color]=count
    for i in range(m):
      x,y=map(int,input().split())
      print(ans[vis[x][y]])
    
    

    递归限制设定

    默认递归限制很小,利用以下代码设置

    import sys
    sys.setrecursionlimit(10000)
    
  • 相关阅读:
    Spring5.0源码导入IDEA(一)
    适配器模式
    3.6常见查询示例
    3.5在批处理模式下使用mysql
    3.4获取有关数据库和表的信息
    3.3.4.9使用多个表
    3.3.4.8计数行
    3.3.4.7模式匹配
    3.3.4.6使用NULL值
    3.3.4.5日期计算
  • 原文地址:https://www.cnblogs.com/mollnn/p/12670993.html
Copyright © 2011-2022 走看看