acm.b题

    每个人都知道异性相吸。这就是“完美配对”婚介所的关键原则。“完美配对”的婚介人员根据每个注册客户的兴趣对其进行分类,并将其分配给第i个客户编号ti(- 10≤ti≤10)。当然,一个数字可以分配给任意数量的客户。“完美匹配”想要宣传自己的服务,并公布相对的伴侣数量,即t值相对的伴侣数量。每对伴侣恰好由两个客户组成。客户可以包括在一对任意次数的夫妇中。帮助机构编写程序,根据给定的序列t1、t2、…、tn找到所需的编号。例如,如果t =(1, - 1,1, - 1),那么任意两个元素ti和tj形成一对,如果i和j有不同的奇偶性。因此,在这种情况下,寻求的数字等于4。当然,一个客户不可能和他/她成为一对。输入输入数据的第一行包含一个整数n(1≤n≤105),表示“配对”的注册客户端数量。第二行包含一个整数序列t1, t2,…, tn(- 10≤ti≤10),ti -为客户兴趣分析结果分配给客户的第i个客户的参数。输出打印与t相反的海关对偶数。x的对偶数是number - x(0与自身相反)。只有客户订单不同的夫妻被认为是相同的。注意,问题的答案可能足够大,因此必须使用64位整数类型进行计算。请不要使用% lld描述符读或写在С+ + 64位整数。它是首选使用cin, cout流或%I64d规格。

最开始很快就写出了这套题,但发现无论怎样都提交不上,最后才知道用了两层for导致输出超限,解决的办法就是用map或者下标法判断加起来和为0的两个数 有多少种组合。然后把0和非0分开讨论, #include"iostream" #include"algorithm" #include"cstring" #include"map" using namespace std; int main()
{
int n;
while(cin >> n)
{
map<int,long long> mm;
for(int i = 0;i < n;i ++)
{
int t;
cin >> t;
mm[t]++;
}
long long sum = 0;
for(int i = -10;i < 0;i ++)
{
if(mm[i] != 0)
{
long long x=mm[i]mm[-i];
sum+=x;
}
}
// cout<<sum<<endl;
long long h=mm[0];
sum+=(mm[0]
(mm[0]-1))/2;
cout<<sum<<endl;
}
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值