HDU 3183 A Magic Lamp

http://acm.hdu.edu.cn/showproblem.php?pid=3183

思路:如果没有别的可能的话,只能是最后的N位。但是前面的可能有比N位中的首位更小的数字m,然后找到这个更小的。再从m开始到最后N-1位找N-1位数字的首数字。

View Code
 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的算法。

posted @ 2012-09-03 11:40  YORU  阅读(232)  评论(0编辑  收藏  举报