SH07-200 Mices Có N con chuột trong 1 đương hầm thẳng hẹp ( Chỉ cho phép 1 con chuột đứng ở một chỗ tại một thời điểm). Có N cái ổ chuột nằm dọc theo đường hầm, một con chuột có thể ở nguyên vị trí của nó hoặc di chuyển một bước sang phải từ vị trí x sang x+1 hoặc một bước sang vị trí x-1. Mỗi bước di chuyển tiêu tốn 1 phút . Giả sử đường hầm là trục số nguyên Ox, biết vị trí N con chuột và N ổ chuột, hãy tính số phút tối thiểu để con chuột cuối cùng chui được vào ổ? Mô tả đầu vào Dòng 1 ghi số nguyên T là số bộ test cần kiểm tra Mỗi bộ test gồm: Dòng đầu: Chứa số nguyên N Dòng thứ 2: Chứa N số nguyên khác nhau cho biết vị trí của N con chuột Dòng thứ 3: Chứa N số nguyên khác nhau cho biết vị trí của N tổ chuột Ràng buộc 1\leq T \leq 100; 1\leq N \leq 10^41≤T≤100;1≤N≤10 4 Vị trí của các con chuột và tổ chuột là số nguyên có giá trị tuyệt đối không quá 10^710 7 Mô tả đầu ra Ứng với mỗi bộ test in ra số giây tối thiểu để con chuột cuối cùng chui vào ổ của nó Hướng dẫn: • Ở đây đều là những chú chuột thông minh thì chắc chắn sẽ chui vào hang gần nó nhất nhé. • Vậy bài này có thuật toán (cách giải) đơn giản là: o Sort lại vị trí đang đứng của con chuột o Sort lại vị trí của hang o Phút 1: Những con đứng đúng vị trí hang vào hang, những con gần hang tiến lại hang của nó 1 bước.... cứ như thế phút thứ k thì con chuột cuối cùng sẽ chui vào hang => đi tìm k và lúc này k chính là số bước để con chuột xa hang của nó nhất về đúng hang đó, hay k=max(∣ai−bi∣) Test case mẫu Đầu vào mẫu 1 1 3 4 -4 2 4 0 5 Đầu ra mẫu 1 4 C++ nha

1 câu trả lời

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int T,N,vitri[100004],to[100004];
    cin >> T >> N;
    while(T--)
    {
        int dem=0;
        for(int i=1;i<=N;i++){
            cin >> vitri[i];
            vitri[i]=fabs(vitri[i]);}
        for(int i=1;i<=N;i++){
            cin >> to[i];
            to[i]=fabs(to[i]);}
        sort(vitri+1,vitri+N+1);
        sort(to+1,to+N+1);
        for(int i=1;i<=N;i++)
        {
            if(vitri[i]==to[i])
            {
                dem+=1;
            }
            if(vitri[i]<to[i])
            {
                dem+=fabs(to[i]-vitri[i]);
            }
            if(vitri[i]>to[i])
            {
                dem+=fabs(vitri[i]-to[i]);
            }
        }
        cout << dem << endl;
    }
}