fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. ios_base::sync_with_stdio(false);
  5. cin.tie(0);
  6. int a[8];
  7. cin >> a[1] >> a[2] >> a[3] >> a[4] >> a[5] >> a[6];
  8. int n;
  9. cin >> n;
  10. vector<int>v(n + 3), val;
  11. set<int>st;
  12. map<int, vector<int> >mp;
  13. for(int i = 1; i <= n; i++){
  14. cin >> v[i];
  15. for(int j = 1; j <= 6; j++){
  16. if(st.find(v[i] - a[j]) == st.end()){
  17. val.push_back(v[i] - a[j]);
  18. st.insert(v[i] - a[j]);
  19. }
  20. mp[v[i] - a[j]].push_back(i);
  21. }
  22. }
  23. vector<int>cnt(n + 5, 0);
  24. int ans = 1e9 + 50;
  25. sort(val.begin(), val.end());
  26. int j = -1, c = 0;
  27. for(int i = 0; i < val.size(); i++){
  28. if(c == n){
  29. ans = min(ans, val[j] - val[i]);
  30. for(int r = 0; r < mp[val[i]].size(); r++){
  31. int p = mp[val[i]][r];
  32. cnt[p]--;
  33. if(cnt[p] == 0){
  34. c--;
  35. }
  36. }
  37. continue;
  38. }
  39. for(int k = j + 1; k < val.size(); k++){
  40. for(int r = 0; r < mp[val[k]].size(); r++){
  41. int p = mp[val[k]][r];
  42. cnt[p]++;
  43. if(cnt[p] == 1){
  44. c++;
  45. }
  46. }
  47. if(c == n){
  48. ans = min(ans, val[k] - val[i]);
  49. j = k;
  50. break;
  51. }
  52. if(k == n){
  53. j = n + 1;
  54. }
  55. }
  56. if(j == n + 1){
  57. break;
  58. }
  59. for(int r = 0; r < mp[val[i]].size(); r++){
  60. int p = mp[val[i]][r];
  61. cnt[p]--;
  62. if(cnt[p] == 0){
  63. c--;
  64. }
  65. }
  66. }
  67. cout << ans;
  68. return 0;
  69. }
Success #stdin #stdout 0s 4504KB
stdin
1 1 2 2 3 3
7
13 4 11 12 11 13 12
stdout
7