Nộp bài | Các bài nộp | Làm tốt nhất | Về danh sách bài |
PTIT018K - ACM PTIT 2018 K - MÁY TURING HỮU HAN |
Máy Turing hữu hạn là một máy gồm N trạng thái. Ứng với trạng thái i được gán nhãn bằng T[i] (1≤i≤N). Máy Turing hữu hạn với giá trị các trạng thái T ={T1, T2, .., TN} chỉ có thể thực hiện được ba thao tác cơ bản dưới đây:
- Thao tác R (Right): Di chuyển đến trạng thái tiếp theo (Ti®Ti+1).
- Thao tác L(Left): Lùi lại trạng thái trước đó (Ti®Ti-1).
- Thao tác G (Go To): Nhảy đến trạng thái có giá trị bằng với trạng thái hiện tại (Ti ® Tj: Ti=Tj).
Cho hai trạng thái P, Q bất kỳ. Bạn hãy dịch chuyển trạng thái P về trạng thái Q sao cho số thao tác L, R, G cần được thực hiện là ít nhất.
Ví dụ với máy Turing gồm 7 trạng thái T[] = {5, 4, 2, 3, 5, 5, 0}, P = 2, Q = 7. Khi đó các thao tác L, R, G ít nhất cần thực hiện là LGR: Lùi về trạng thái số 1 (T1=5) bằng phép L, di chuyển đến vị trí số 6 bằng phép G (T6=5), dịch phải một bước bằng phép R (T7=0).
Input
Dòng đầu tiên đưa vào số lượng bộ test T (T≤100).
Mỗi bộ test gồm hai phần. Phần thứ nhất ghi lại bộ 3 N, P, Q. Phần thứ hai ghi lại N số nguyên không âm là giá trị N trạng thái T ={T1, T2, .., TN} của máy Turing.
(0≤Ti ≤1000; 1<N ≤1000; 1≤P, Q≤N).
Output
Với mỗi test in ra số bước dịch chuyển ít nhất tìm được.
Example
Input: 4
7 1 7
5 4 2 3 5 5 0
7 2 7
5 4 2 3 5 5 0
7 5 6
5 4 2 3 5 5 0
7 1 7
1 2 3 4 5 6 7
Output: 2
3
1
6
Dòng đầu tiên là số lượng bộ test T (T≤100).
Mỗi test gồm dòng thứ nhất chứa số nguyên N là số lượng phần tử của mảng A[] (1≤N≤1000).
Dòng tiếp theo gồm N số nguyên A[i] (1≤A[i]≤5000).
Được gửi lên bởi: | adm |
Ngày: | 2018-05-14 |
Thời gian chạy: | 1s |
Giới hạn mã nguồn: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Ngôn ngữ cho phép: | ASM32-GCC ASM32 ASM64 MAWK BC C CSHARP C++ 4.3.2 CPP CPP14 COFFEE LISP sbcl DART FORTH GO JAVA JS-RHINO JS-MONKEY KTLN OCT PAS-GPC PAS-FPC PERL PERL6 PROLOG PYTHON PYTHON3 PY_NBC R RACKET SQLITE SWIFT UNLAMBDA |