花栗鼠很喜欢偷吃生产队的大萝卜,因此花栗鼠科技大学正在研究一种新型的数据库,叫做萝卜数据库...(Python代码)

Posted Z.Q.Fengᯤ⁵ᴳ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了花栗鼠很喜欢偷吃生产队的大萝卜,因此花栗鼠科技大学正在研究一种新型的数据库,叫做萝卜数据库...(Python代码)相关的知识,希望对你有一定的参考价值。

题目描述

花栗鼠很喜欢偷吃生产队的大萝卜,因此花栗鼠科技大学正在研究一种新型的数据库,叫做萝卜数据库。

具体来说,它支持 k ( 1 ≤ k ≤ 100 ) k(1 \\leq k \\leq 100) k(1k100) 个字段,每个字段名都是整数,里面存储的数值也都是整数。

现在你支持如下操作:

  • 向数据库中插入一个记录,它可能只会包含 k k k 个字段的某一部分。具体的操作格式详见“输入格式”。
  • 在数据库中查询有多少条符合条件的记录。

现在你总共有 n n n 次操作 ( 1 ≤ n ≤ 1000 ) (1 \\leq n \\leq 1000) (1n1000),请你对每个回答操作,输出结果。


输入格式

第一行两个整数 n , k n,k n,k,意义如题所述。

接下来的若干行,每行代表一次操作,具体如下:

  • 1    p    x 1    y 1 ,   . . . ,   x p    y p 1\\ \\ p\\ \\ x_1\\ \\ y_1,\\ ...,\\ x_p\\ \\ y_p 1  p  x1  y1, ..., xp  yp:表示一个插入操作,其中共有 p p p 个字段,第 i i i 字段的名字是 x i x_i xi,值为 y i y_i yi 。此处我们保证 1 ≤ x i ≤ k , 1 ≤ y i ≤ 1000 1 \\leq x_i \\leq k, 1\\leq y_i \\leq 1000 1xik,1yi1000,并且 x i , y i x_i,y_i xi,yi 均为整数。
  • 2    x    y m i n    y m a x 2\\ \\ x\\ \\ y_min\\ \\ y_max 2  x  ymin  ymax:表示一次查询操作,表示查询所有满足 字段 x x x 的值在 [ y m i n , y m a x ] [y_min,y_max] [ymin,ymax] 之间的记录有多少个。

输出格式

对于每个查询操作,输出一行一个整数,表示符合条件的记录个数。


输出样例

输入:

4 5
1 2 1 2 2 4
2 2 1 5
1 2 3 5 4 6
2 4 7 8

输出:

1
0

题目分析

输入分析

题目的意思很明确,建立一个简单的数据库,数据是以“键-值”的形式存储的,因此对于输入数据,我们可以使用 Python 中的字典来进行存储,同时考虑到同一个键可以对应多个值,所以字典中的 Value 我们用一个列表来代替,即:

key1:[…], key2:[…], …, keyn:[…]

以第一行输入:1 2 1 2 2 4 为例:

1:[2], 2:[4]

输出分析

简单的查询操作,根据键找到对应的值列表,只需要查找出值列表中有多少个元素在范围内即可。


代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Dec 20 11:34:57 2021

简单的数据库操作

@author: zq
"""

# n 步操作,最大 k 个字段
n, k = map(int, input().split(' '))
# 创建一个字典
d = 
# 读取每步操作
for i in range(n):
    # 读取第 i 步操作输入
    tmp = list(map(int, input().split(' ')))
    # 如果是插入操作
    if tmp[0] == 1:
        p = tmp[1] # 获取插入字段数
        for j in range(0, 2 * p, 2):# 每两个输入为一次插入
            # 键、值
            k, v = str(tmp[2 + j]), tmp[3 + j] 
            # 若键不存在则创建键-值列表
            if k not in d.keys():
                d[k] = []
            # 向值列表中插入元素
            d[k].append(v)
    # 如果是查询操作
    elif tmp[0] == 2:
        k = str(tmp[1]) # 获取查询的键
        v = d[k] # 获取值列表
        a, b = tmp[2], tmp[3] # 获取字段值上下界
        count = 0
        # 查找值列表中在范围内的元素个数
        for i in v:
            if a <= i <= b:
                count += 1
        # 打印输出
        print(count)

以上是关于花栗鼠很喜欢偷吃生产队的大萝卜,因此花栗鼠科技大学正在研究一种新型的数据库,叫做萝卜数据库...(Python代码)的主要内容,如果未能解决你的问题,请参考以下文章

Swift installTap 使用蓝牙麦克风产生“花栗鼠”音频

将 MP3 流式传输到 Discord.net 2.0 - 音频速度超快(花栗鼠)。想法?

松鼠大战的介绍

松鼠动画形象谁发明?

松鼠大作战的介绍

奇奇和蒂蒂的松鼠大作战