题目描述
题目描述
33DAI 拿到了 nn 个篮球,从 11 到 nn 分别编号,第 ii 个篮球的重量为 a_iai。
Kitten 抢走了 mm 个篮球,抢走的篮球编号分别为 b_1\sim b_mb1∼bm。
33DAI 想要在剩下的篮球中挑出两个一样重的,请问有多少种方案?
输入格式
第一行一个整数 n,mn,m。
第二行为空格隔开的 a_1\sim a_na1∼an。
第三行为空格隔开的 b_1\sim b_mb1∼bm。
输出格式
一行一个整数,表示方案数量。
输入1:
10 3
1 1 2 2 1 1 1 3 3 2
3 5 9
输出1:
7
样例解释
1 1 (2) 2 (1) 1 1 3 (3) 2
拿走了第 33、第 55 和第 99 个篮球后,剩下的为:
1 1 2 1 1 3 2
要拿走两个一样的篮球
- 拿走两个重量为 11 的篮球有 66 种方案。
- 拿走两个重量为 22 的篮球有 11 种方案。
一共有 77 种方案。
数据规模与约定
对于 100%100% 的数据,0 \le m\le n \le 10000≤m≤n≤1000,1\le a_i\le 1001≤ai≤100,1\le b_i\le n1≤bi≤n。
- 子任务 1(30 分):m=0m=0。
- 子任务 2(30 分):a_i=1ai=1。
- 子任务 3(40 分):没有特殊限制。
#include<bits/stdc++.h> using namespace std; int array_a[1010]; int array_b[1010]; int array_c[1010]; int qp(int a){//组合 long long m=(a*(a-1))/2; return m; } int main(){ int n,m,a,cnt1=0; cin>>n>>m; for(int i=1;i<=n;i++){ a=0; cin>>array_b[i];//数组记录 array_a[array_b[i]]++;//下标记录 } for(int i=1;i<=m;i++){ cin>>a; array_a[array_b[a]]--;//减去第几个球 } for(int i=1;i<=1010;i++){ if(array_a[i]<2)continue;//剩下大于等于二的球 cnt1+=qp(array_a[i]);//求组合 } cout<<cnt1; return 0; }