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 }
康复训练中~欢迎交流!