Không biết vì sao vòng lặp vô hạn

Mọi người chỉ cho em vì sao code này lại bị vòng lặp vô hạn ạ. Em cảm ơn. Nếu mọi người cần đề https://vnspoj.github.io/problems/BWPOINTS.html

#include <bits/stdc++.h>
using namespace std;

 int d = 0;

int main () {
   vector <int> a (100002);
 vector <int> b (100002);
   int n;
   cin >> n;
   for (int i = 0; i < n;i++) {
    cin >> a[i];
   }
   for (int i = 0; i < n;i++) {
     cin >> b[i];
   }
   sort (a.begin(), a.end());
   sort (b.begin(), b.end());
  int  j = 0;
    int i = 0;
     int res;
     while (i<= n-1&&j<=n-1) {
         if (a[i] > b[j]) {
           res = a[i];                   
           d++;                        
           i++;                         
            while (b[j] < res&&j<=n-1) {
            if (j==n-1) d--;
            j++;
        }
   }
        if (b[j] > a[i]) {
            res = b[j];
            d++;
            i++;
            j++;
            while (a[i] < res&&i<=n-1) {
                i++;
                if (i==n-1) d--;
            }
          }
     }
       cout << d;
       return 0;
}

sort (a.begin(), a.end());
sort (b.begin(), b.end());
Đoạn này bạn sort lại toàn bộ vector nên bị lỗi ở đây!
Do trong vector ban đầu toàn bộ số là 0 nên khi sort lại toàn bộ sẽ bị sai. Nên trong vòng lặp của bạn sẽ có TH xét 2 số bằng 0 nên nó bị lặp vô hạn chỗ này. Sửa lại thì một là bạn khởi tạo vector bằng số max hay là bạn chỉ sort trong n số đầu của 2 dãy a và b thôi!

2 Likes

Vâng, mình cảm ơn, mình đã sửa trước rồi nhưng bạn cung cấp chi tiết hơn

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?