第一题只过了54%,谁能知道为什么? int main() { int N; while (cin >> N) { // 逐字符读入vector,对B排序 int ok = 0; for (int i = 0; i < N; ++i) { int pos = -1; for (int j = i; j < N; ++j) { if (B[j] >= A[i] && (pos == -1 || B[j] < B[pos])) pos = j; } if (pos == -1) { ok = -1; break; } swap(B[i], B[pos]); if (B[i] > A[i]) { ok = -2; sort(B.begin()+i+1, B.end()); // 输出B break; } } if (ok == -1) { cout << -1 << endl; continue; } else if (ok == -2) { continue; } int imax = N-1; int i = N-2; while (i >= 0) { if (B[i] >= B[imax]) imax = i; else break; --i; } if (i == -1) { cout << -1 << endl; continue; } int j = i+1, mpos = -1; while (j < N) { if (B[j] > B[i] && (mpos == -1 || B[mpos] > B[j])) mpos = j; ++j; } swap(B[i], B[mpos]); sort(B.begin()+i+1, B.end()); // 输出B } return 0; }