JNEXT - Just Next !!!
Đây là một bài trên Spoj mà em đang mắc kẹt. Cái khó là Spoj không cho biết test cas nào sai. Đây là code của em:
int num, n;
cin >> num;
bool possible;
for (int i = 0; i < num; i++)
{
cin >> n;
vector<int> v(n);
for (int j = 0; j < n; j++) cin >> v[j];
possible = false;
for (int j = n - 2; j >= 0; j--)
{
if (v[j] < v[j + 1])
{
possible = true;
swap(v[j], v[j + 1]);
sort(v.begin() + j + 1, v.end());
for (int k = 0; k < n; k++) cout << v[k];
break;
}
}
if (possible) cout << endl;
else cout << "-1" << endl;
}
Input:
2
5
1 5 4 8 3
10
1 4 7 4 5 8 4 1 2 6
Output:
15834
1474584162
Ý tưởng của em là chạy từ cuối chuỗi chữ số về theo thứ tự tăng dần cho tới khi gặp 1 số phá quy luật tăng dần. Sau đó, em swap số đó với số sau nó(j + 1) và sắp xếp chữ số từ j + 1 đến n. Cuối cùng in ra.
Test case mẫu của bài thì thuật toán vẫn chạy ok. Không hiểu sai ở đâu mong các cao nhân chỉ giáo ạ