fork(1) download
  1. #include <iostream>
  2. #include<string>
  3. #include<algorithm>
  4. #include<cstdio>
  5. #include<cmath>
  6. #include<map>
  7. #include<vector>
  8.  
  9. using namespace std;
  10.  
  11. int main()
  12. {
  13. vector<int> b;
  14. vector<int> c;
  15. int a[4000][4],n;
  16. cin>>n;
  17. for(int i=0;i<n;i++)
  18. for(int j=0;j< 4;j++)
  19. scanf("%d",&a[i][j]);
  20.  
  21. for(int i=0;i<n;i++)
  22. { int p=a[i][0];
  23. for(int j=0;j< n;j++)
  24. { b.push_back(p+a[j][1]);
  25.  
  26. }
  27. }
  28. int k=0;
  29. for(int i=0;i< n;i++)
  30. { int p=a[i][2];
  31. for(int j=0;j< n;j++)
  32. { c.push_back(p+a[j][3]);
  33. k++;
  34. }
  35. }
  36. sort(b.begin(), b.end());
  37. long cnt=0;
  38. for(int j=0;j<k;j++){
  39. int start = 0;
  40. int end = n*n - 1;
  41. int x = -1;
  42. int y = -1;
  43. while(start <= end){
  44. int mid = (start + end)/2;
  45. if(b[mid] == -c[j]){
  46. end = mid - 1;
  47. x = (x > mid || x==-1) ? mid: x;
  48. }else if(b[mid] > -c[j]){
  49. end = mid - 1;
  50. }else{
  51. start = mid + 1;
  52. }
  53. }
  54. if(x != -1){
  55. start = 0;
  56. end = n*n - 1;
  57.  
  58. while(start <= end){
  59. int mid = (start + end)/2;
  60. if(b[mid] == -c[j]){
  61. start = mid + 1;
  62. y = (y < mid || y ==-1)? mid: y;
  63. }else if(b[mid] > -c[j]){
  64. end = mid - 1;
  65. }else{
  66. start = mid + 1;
  67. }
  68. }
  69. cnt += y - x + 1;
  70. }
  71. }
  72. printf("%d\n",cnt);
  73. return 0;
  74. }
Success #stdin #stdout 0s 3148KB
stdin
Standard input is empty
stdout
0