Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int int64_t
  3. #define F first
  4. #define S second
  5.  
  6. using namespace std;
  7.  
  8. int n,k;
  9. vector<int> a;
  10. unordered_map<int,int32_t> m;
  11. int32_t col[10'000'500];
  12.  
  13. int solve1()
  14. {
  15. int ans=0;
  16. sort(a.begin(),a.end());
  17. for(int32_t i=2;i<n-1;i++){
  18. for(int32_t j=i+1;j<n;j++){
  19. if(a[i]+a[j]>=k) continue;
  20. m[a[i]+a[j]]++;
  21. }
  22. }
  23. for(int32_t i=1;i<n;i++){
  24. for(int32_t j=0;j<i;j++){
  25. int sum=a[i]+a[j];
  26. if(k-sum<=0) break;
  27. ans+=m[k-sum];
  28. }
  29. for(int32_t j=i+2;j<n;j++){
  30. if(a[i+1]+a[j]>=k) break;
  31. m[a[i+1]+a[j]]--;
  32. }
  33. }
  34. return ans;
  35. }
  36.  
  37. int solve2()
  38. {
  39. int ans=0;
  40. for(int32_t i=2;i<n-1;i++){
  41. for(int32_t j=i+1;j<n;j++){
  42. col[a[i]+a[j]]++;
  43. }
  44. }
  45. for(int32_t i=1;i<n;i++){
  46. for(int32_t j=0;j<i;j++){
  47. int sum=a[i]+a[j];
  48. if(k-sum<0) continue;
  49. ans+=col[k-sum];
  50. }
  51. for(int32_t j=i+2;j<n;j++){
  52. col[a[i+1]+a[j]]--;
  53. }
  54. }
  55. return ans;
  56. }
  57.  
  58. int32_t main()
  59. {
  60. ios_base::sync_with_stdio(false);
  61. cin.tie(0); cout.tie(0);
  62. cin>>n>>k; int mx=0;
  63. for(int i=0;i<n;i++){
  64. int x; cin>>x; if(x>=k) continue;
  65. a.push_back(x);
  66. mx=max(mx,x);
  67. }
  68. n=a.size();
  69. if(mx<=5'000'000){
  70. cout<<solve2()<<endl;
  71. }else{
  72. cout<<solve1()<<endl;
  73. }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement