题解 | #完美对#

完美对

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

相关推荐

05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务