OpenJudge1551 Sumsets

来源:互联网 发布:游戏数据分析师收入 编辑:程序博客网 时间:2024/05/04 04:04

题目:http://noi.openjudge.cn/ch0305/1551/
分析:移向得:a+b=d-c;于是hash.
代码:

#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=1005,key=1000007,inf=2147483640;struct node{    int w,a,b,next;};node h[Tmax*Tmax];int n,data[Tmax],head[key],last,ans;int main(){    int i,j,p;    while(scanf("%d",&n)==1&&n!=0)    {        for(i=1;i<=n;i++)          scanf("%d",&data[i]);        last=-1;        ans=-inf;        memset(head,0,sizeof(head));        for(i=1;i<=n;i++)          for(j=1;j<=n;j++)          {            if(i==j) continue;            h[++last].a=data[i];            h[last].b=data[j];            h[last].w=data[i]-data[j];            h[last].next=head[((data[i]-data[j])%key+key)%key];            head[((data[i]-data[j])%key+key)%key]=last;          }        for(i=1;i<=n;i++)          for(j=i+1;j<=n;j++)          {            if(head[((data[i]+data[j])%key+key)%key]==0) continue;            for(p=head[((data[i]+data[j])%key+key)%key];p;p=h[p].next)            {                if(h[p].w!=data[i]+data[j]) continue;                if(h[p].a==data[i]||h[p].a==data[j]||h[p].b==data[i]||h[p].b==data[j]) continue;                ans=max(ans,h[p].a);            }          }        if(ans==-inf) printf("no solution\n");        else printf("%d\n",ans);    }    return 0;}
0 0
原创粉丝点击