题目描述
康娜喜欢吃糖。于是托尔为她准备了一些糖。康娜会选择一些吃。
糖果总共有 n 颗,每颗糖果属于一个种类,而每一个种类有一个独一无二的编号。
我们假设第 i 颗糖果编号为 ai,并且总共会发生 m 个事件:
事件1:康娜吃掉了一颗糖果
事件2:康娜在询问你现在某种糖果有多少颗。
输入格式
第一行是两个整数 n ,m 意义如题面所述。
接下来一行是 n 个正整数,第 i 个数表示 ai。
接下来 m 行,每行两个数 opt 和 x。
如果 opt=1 表示发生的是事件1,此时x表示康娜吃掉了一颗编号为x的糖果。
如果 opt=2 表示发生的是事件2,此时x表示康娜在问你编号为x的糖果有几颗。
输出格式
若干行,对于每一次事件2,请输出一个数表示答案。
输入 #1
5 2
1 2 3 4 2
1 1
2 2
输出 #1
2
亿年不变的 分析:
首先,我们知道一共有N颗糖果,M个事件,N颗糖果用数组A记录,也就是
for(int i=1;i<=n;i++)
cin>>a[i];
然后事件用变量opt,糖果用变量x进行储存
for(int i=1;i<=m;i++)
{
int opt,x;
cin>>opt>>x;}
然后是两种事件的判断(提示:要写在opt的循环里)
for(int i=1;i<=m;i++)
{int opt,x;
cin>>opt>>x;
if(opt==1)
else if(opt==2)}
那中间该咋办呢?
我们可以写一个桶ret,记录每个 糖果编号的出现次数。
当事件是1时ret[x]--。
事件是2时cout<<ret[x]<<endl。(别忘了换行)
这不就出代码了。
代码:
#include <bits/stdc++.h>
using namespace std;
int a[1010],ret[1010];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
ret[a[i]]++;
}
for(int i=1;i<=m;i++)
{
int opt,x;
cin>>opt>>x;
if(opt==1) ret[x]--;//如果是事件1,ret[x]--;
else if(opt==2) cout<<ret[x]<<endl;//如果是事件2,输出ret[x];
}
return 0;
}
别抄,作者相信你看完解析会做
希望对你有帮助!!
(有问题可以在评论区讨论)