# Diamond Collector Can Someone explain the sample test case

I am trying to solve this problem.
As far as I understood, the problem is asking to count the number of pairs such that the absolute difference between them is less than or equal to K

Based on this understanding I coded up the solution but it fails on all test cases except the first one i.e :-

7 3
10
5
1
12
9
5
14

#### SAMPLE OUTPUT:

5

Can someone explain what is actually asked in the problem and explain the sample test case please.

Here’s my code

``````// http://www.usaco.org/index.php?page=viewproblem2&cpid=643
#include <bits/stdc++.h>
// Common file
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;
using namespace std;

using ll = long long;
using pi = pair<int, int>;
using ti = tuple<int, int, int>;
using tl = tuple<ll, ll, ll>;
using pil = pair<int, ll>;
using pli = pair<ll, int>;
using pl = pair<ll, ll>;
using vi = vector<int>;
using vl =  vector<ll>;
using vpi = vector<pi>;
using vpil = vector<pil>;
using vpli = vector<pli>;
using vpl = vector<pl>;
using vti = vector<ti>;
using vtl = vector<tl>;
using vvi = vector<vi>;
using vvl = vector<vl>;
using vvpi = vector<vpi>;
using vvpil = vector<vpil>;
using vvpli = vector<vpli>;
using vvpl = vector<vpl>;
using vvti = vector<vti>;
using vvtl = vector<vtl>;

using oset =  tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>;

using omset =  tree<pair<int,int>, null_type, less<pair<int, int>>, rb_tree_tag, tree_order_statistics_node_update>;

const int INF = INT_MAX;
const ll LINF = LLONG_MAX;
const int MOD = 1000000000 + 7;

#define setbits(n) __builtin_popcount(n)
#define len(x) (int)size(x)

void setIO(string name = "") {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
if (len(name)) {
ignore = freopen((name + ".in").c_str(), "r", stdin);
ignore = freopen((name + ".out").c_str(), "w", stdout);
}
}

const int N = (int) 5e4;
int a[N];

int main() {
/* setIO("diamond"); */
int n, k;
cin >> n >> k;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n);
for (int i = 0; i < n; i++) {
cout << a[i] << "\n";
}
int j = 0;
ll ans = 0;
for (int i = 0; i < n; i++) {
while (j < i and a[i] - a[j] > k) {
j++;
}
cout << "adding " << i-j << endl;
ans += i - j;
}
cout << ans << "\n";
return 0;
}

``````

Sorry, the solution got TLE’s… Basic idea is to use two pointers.

The silver version is similar to the bronze version, so maybe you could read the bronze version first.
The bronze problem wants you to output the maximum number of diamonds you can put in a case where (the largest diamond from that case) - (the smallest diamond from that case) <= K.
In the silver problem, N is larger (so brute force solutions won’t work), and there are 2 cases.

The best selection of the sample for the silver problem is:
1 (5 5) (9 10 12) 14
The 2 pairs of parentheses are the 2 cases, and the total number of diamonds is 2 + 3 = 5.