题解 | #完美对#

完美对

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;
}
全部评论

相关推荐

面试摇了我吧:啊哈哈面试提前五个小时发,点击不能参加就是放弃
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务