poj 3617 Best Cow Line

题意:

给出一个字符串,每次可以从首位或者尾部拿一个字符放到一个新的字符串中,求字典序最小的新字符串。

思路:

贪心,不同取小的,相同就比较,直到不同或者比较完毕,再取小的(相同随便取)。

坑:

pe一万发,首先i为0的时候i % 80 = 0这个要注意,其次是如果最后剩了不足80,那么也要换行。

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 char a[2005];
 5 
 6 int cmp(int i,int j)
 7 {
 8     for (;i <= j;i++,j--)
 9     {
10         if (a[i] < a[j]) return -1;
11         else if (a[i] > a[j])return 1;
12     }
13 
14     return 0;
15 }
16 
17 int main()
18 {
19     int n;
20 
21     while (scanf("%d",&n) != EOF)
22     {
23         int cnt = 0;
24 
25         for (int i = 0;i < n;i++)
26         {
27             char s[5];
28 
29             scanf("%s",s);
30 
31             a[cnt++] = s[0];
32         }
33 
34         int i = 0,j = cnt - 1;
35 
36         char e[2005];
37         int num = 0;
38 
39         while (i <= j)
40         {
41             if (i == j)
42             {
43                 e[num++] = a[i];
44                 break;
45             }
46 
47             if (a[i] < a[j])
48             {
49                 e[num++] = a[i++];
50             }
51             else if (a[i] > a[j])
52             {
53                 e[num++] = a[j--];
54             }
55             else
56             {
57                 if (cmp(i,j) < 0) e[num++] = a[i++];
58                 else if (cmp(i,j) > 0) e[num++] = a[j--];
59                 else e[num++] = a[i++];
60             }
61         }
62 
63         e[num] = 0;
64 
65         for (int i = 0;i < num;i++)
66         {
67             if (i % 80 == 0 && i) printf("\n");
68             printf("%c",e[i]);
69         }
70 
71         if (num % 80) printf("\n");
72     }
73 
74 
75 
76     return 0;
77 }

 

posted @ 2017-12-12 11:16  qrfkickit  阅读(192)  评论(0编辑  收藏  举报