4471: 唱跳RAP4471: 唱跳RAP

题目描述

题目描述

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;
    }
    
    

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值