fork download
  1. // ~~ icebear ~~
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef pair<int, int> ii;
  7. typedef pair<int, ii> iii;
  8.  
  9. template<class T>
  10. bool minimize(T &a, const T &b) {
  11. if (a > b) return a = b, true;
  12. return false;
  13. }
  14.  
  15. template<class T>
  16. bool maximize(T &a, const T &b) {
  17. if (a < b) return a = b, true;
  18. return false;
  19. }
  20.  
  21. #define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
  22. #define FORR(i,a,b) for(int i=(a); i>=(b); --i)
  23. #define REP(i, n) for(int i=0; i<(n); ++i)
  24. #define RED(i, n) for(int i=(n)-1; i>=0; --i)
  25. #define MASK(i) (1LL << (i))
  26. #define BIT(S, i) (((S) >> (i)) & 1)
  27. #define mp make_pair
  28. #define pb push_back
  29. #define fi first
  30. #define se second
  31. #define all(x) x.begin(), x.end()
  32. #define task ""
  33. #define lefta icebear
  34. #define leftb cute
  35.  
  36. const int MOD = 1e9 + 7;
  37. const int inf = 1e9 + 27092008;
  38. const ll INF = 1e18 + 27092008;
  39. const int N = 2e5 + 5;
  40. int n, k;
  41. int a[N], b[N];
  42. vector<int> lefta, leftb;
  43. vector<int> moda, modb;
  44. ll ans;
  45.  
  46. void init(void) {
  47. cin >> n >> k;
  48. FOR(i, 1, n) {
  49. cin >> a[i];
  50. if (a[i] % k == 0) {
  51. moda.pb(a[i]);
  52. continue;
  53. }
  54. ans += (a[i] + (k - 1)) / k;
  55. lefta.pb(a[i] % k);
  56. }
  57. FOR(i, 1, n) {
  58. cin >> b[i];
  59. if (b[i] % k == 0) {
  60. modb.pb(b[i]);
  61. continue;
  62. }
  63. ans += (b[i] + (k - 1)) / k;
  64. leftb.pb(b[i] % k);
  65. }
  66. }
  67.  
  68. void process(void) {
  69. REP(i, min((int)moda.size(), (int)modb.size()))
  70. ans += (moda[i] + modb[i]) / k;
  71.  
  72. if (moda.size() > modb.size()) FOR(i, (int)modb.size(), (int)moda.size() - 1) ans += moda[i] / k + 1, lefta.pb(0);
  73. else FOR(i, (int)moda.size(), (int)modb.size() - 1) ans += modb[i] / k + 1, leftb.pb(0);
  74.  
  75. sort(all(lefta));
  76. sort(all(leftb), greater<int>());
  77. vector<bool> ok(n + 5, false);
  78. n = (int)lefta.size();
  79. int j = 0;
  80. REP(i, n) {
  81. while (j < n && lefta[i] + leftb[j] > k) j++;
  82. if (j < n) {
  83. ans--;
  84. j++;
  85. }
  86. }
  87.  
  88. cout << ans;
  89. }
  90.  
  91. int main() {
  92. ios_base::sync_with_stdio(0);
  93. cin.tie(0); cout.tie(0);
  94. if (fopen(task".inp", "r")) {
  95. freopen(task".inp", "r", stdin);
  96. freopen(task".out", "w", stdout);
  97. }
  98. int tc = 1;
  99. // cin >> tc;
  100. while(tc--) {
  101. init();
  102. process();
  103. }
  104. return 0;
  105. }
  106.  
Success #stdin #stdout 0.01s 5332KB
stdin
Standard input is empty
stdout
Standard output is empty