题解 | #完美对#

完美对

http://www.nowcoder.com/practice/f5a3b5ab02ed4202a8b54dfb76ad035e

容易观察得到两个元素是完美对,它们的K个属性的差分为相反数,差分之和也为相反数。
因此,用哈希法存储元素下标,用K个属性的差分之和作为哈希值。

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int a[100005][11];
int n,k;
vector<int>head[2005];
bool check(int x,int y)
{
    int sum=a[x][1]+a[y][1];
    for(int i=2;i<=k;i++)
        if(a[x][i]+a[y][i]!=sum)
        return false;
    return true;
}
int main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    int i,j,ans=0;
    cin>>n>>k;
    for(i=1;i<=n;i++)
        for(j=1;j<=k;j++)
        cin>>a[i][j];
    for(i=1;i<=n;i++)
    {
        int sum=0;
        for(j=2;j<=k;j++)
            sum+=a[i][j]-a[i][j-1];
        for(j=0;j<head[-sum+1000].size();j++)
            if(check(i,head[-sum+1000][j]))
                ans++;
        head[sum+1000].push_back(i);
    }
    cout<<ans;
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
11-11 14:21
西京学院 C++
无敌混子大王:首先一点,不管学校层次怎么样,教育经历放在第一页靠上位置,第一页看不到教育经历,hr基本直接扔掉了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务