开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
[传智杯 #4 初赛] 萝卜数据库
题目描述
花栗鼠很喜欢偷吃生产队的大萝卜,因此花栗鼠科技大学正在研究一种新型的数据库,叫做萝卜数据库。
具体来说,它支持 个字段,每个字段名都是整数,里面存储的数值也都是整数。
现在你支持如下操作:
-
向数据库中插入一个记录,它可能只会包含 个字段的某一部分。具体的操作格式详见“输入格式”。
-
在数据库中查询有多少条符合条件的记录。
现在你总共有 次操作(),请你对每个回答操作,输出结果。
输入格式
第一行两个整数 ,意义如题所述。
接下来的若干行,每行代表一次操作,具体如下:
-
:表示一个插入操作,其中共有 个字段,第 字段的名字是 ,值为 .此处我们保证 ,并且 均为整数。
-
:表示一次查询操作,表示查询所有满足 字段 的值在 之间的记录有多少个。
输出格式
对于每个查询操作,输出一行一个整数,表示符合条件的记录个数。
样例 #1
样例输入 #1
4 5
1 2 1 2 2 4
2 2 1 5
1 2 3 5 4 6
2 4 7 8
样例输出 #1
1
0
思路分析
- 首先我们需要一个二维数组来维护我们这道题的存储
- 当查询为1时,我们只要在二维数组中记录下他们的次数即可
- 当查询为2时,我们只要在字段中找到与之匹配的数就行了,然后累加起来输出
代码展示
#include<iostream>
using namespace std;
int a[105][1005];
int n, k;
int main()
{
cin >> n >> k;
while (n--) {
int c;
cin >> c;
if (c == 1) {
int p;
cin >> p;
while (p--) {
int x, y;
cin >> x >> y;
a[x][y]++;
}
}
else {
int res = 0;
int x, y_l, y_r;
cin >> x >> y_l >> y_r;
for (int i = y_l; i <= y_r; i++)
res += a[x][i];
cout << res << endl;
}
}
return 0;
}
PS:这是第四届传智杯B组的第五道题,一道非常简单的模拟题,可以说一二三五都是送分题,做的快拿个省二好像都没问题~