HDU 3183 A Magic Lamp
http://acm.hdu.edu.cn/showproblem.php?pid=3183
思路:如果没有别的可能的话,只能是最后的N位。但是前面的可能有比N位中的首位更小的数字m,然后找到这个更小的。再从m开始到最后N-1位找N-1位数字的首数字。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <stdio.h> 2 #include <string.h> 3 #define maxn 1005 4 char s[maxn]; 5 int ans[maxn]; 6 int main() 7 { 8 int i, l, n, len, d, end, mark; 9 char now; 10 while(~scanf("%s%d",s,&d)) 11 { 12 len = strlen(s); 13 n = len - d; 14 l = 0; 15 i = 0; 16 mark = i; 17 end = len - n; 18 while(n--) 19 { 20 now = s[i]; 21 for(; s[i]!='\0' && i <= end; i++) 22 if(s[i] < now) 23 { 24 mark = i; 25 now = s[i]; 26 } 27 ans[l++] = now - '0'; 28 i =++mark; 29 end ++; 30 } 31 for(i = 0; i < l; i++) 32 if(ans[i]!=0) break; 33 if(i == l) printf("0"); 34 else{ 35 for(; i < l; i++) 36 printf("%d",ans[i]); 37 } 38 printf("\n"); 39 } 40 return 0; 41 } 42
等下写下RMQ的算法。