记录编号 329169 评测结果 AAAAAAAAAA
题目名称 旅行安排 最终得分 100
用户昵称 GravatarFoolMike 是否通过 通过
代码语言 C++ 运行时间 7.877 s
提交时间 2016-10-24 21:32:22 内存使用 11.42 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<climits>
  4. using namespace std;
  5. const int N=1010,p=1e6+7,M=1e6+10;
  6. int n,a[N],sit[M],f[M][2];bool vis[M];
  7. int abs(int x){return x>0?x:-x;}
  8. int hash(int x){
  9. int ans=0;
  10. for (int i=abs(x);i;i/=13) ans=(ans*23+i%13+17)%p;
  11. while (sit[ans]!=x&&vis[ans]) ans=(ans==p?0:ans+1);
  12. sit[ans]=x;
  13. return ans;
  14. }
  15. int main()
  16. {
  17. freopen("plana.in","r",stdin);
  18. freopen("plana.out","w",stdout);
  19. for (int t=0;t<2;t++){
  20. memset(vis,0,sizeof vis);
  21. scanf("%d",&n);
  22. for (int i=1;i<=n;i++) scanf("%d",&a[i]);
  23. for (int i=1;i<=n;i++)
  24. for (int j=1;j<i;j++){
  25. int p=hash(a[i]+a[j]);
  26. if (!vis[p]){
  27. vis[p]=1;f[p][0]=i;f[p][1]=j;
  28. }
  29. else{
  30. if (f[p][0]!=i&&f[p][0]!=j) f[p][0]=0;
  31. if (f[p][1]!=i&&f[p][1]!=j) f[p][0]=0;
  32. }
  33. }
  34. int ans=INT_MIN;
  35. for (int i=1;i<=n;i++)
  36. for (int j=1;j<=n;j++)
  37. if (i!=j){
  38. int p=hash(a[i]-a[j]);
  39. if (!vis[p]) continue;
  40. if (i!=f[p][0]&&j!=f[p][0]&&i!=f[p][1]&&j!=f[p][1]&&a[i]>ans) ans=a[i];
  41. }
  42. if (ans!=INT_MIN) printf("%d\n",ans);
  43. else puts("No Solution");
  44. }
  45. return 0;
  46. }