solved
题意:给出一个字符串,可以移掉最多一个字符,在所有可能性中选取一个字典序最小的。
思路:显然,一定可以移掉一个字符,如果移掉的字符的后一个字符大于当前字符,那么字典序会变大。
那只需要从左往右,遇到第一个后面的字符大于当前字符的就可以移掉该字符。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define N 200010 5 int n; 6 char s[N]; 7 8 int main() 9 { 10 while (scanf("%d%s", &n, s + 1) != EOF) 11 { 12 int pos = n; 13 for (int i = 1; i < n; ++i) if (s[i + 1] < s[i]) 14 { 15 pos = i; 16 break; 17 } 18 s[pos] = 0; 19 printf("%s", s + 1); 20 printf("%s\n", s + pos + 1); 21 } 22 return 0; 23 }