贪心 Codeforces Round #300 A Cutting Banner

 

题目传送门

 1 /*  2  贪心水题:首先,最少的个数为n最大的一位数字mx,因为需要用1累加得到mx,  3  接下来mx次循环,若是0,输出0;若是1,输出1,s[j]--;  4  注意:之前的0的要忽略  5 */  6 #include <cstdio>  7 #include <iostream>  8 #include <cstring>  9 #include <string> 10 #include <algorithm> 11 #include <cmath> 12 #include <set> 13 #include <map> 14 using namespace std; 15 16 const int MAXN = 1e4 + 10; 17 const int INF = 0x3f3f3f3f; 18 19 int main(void) //Codeforces Round #300 A Cutting Banner 20 { 21 //freopen ("B.in", "r", stdin); 22 23 char s[10]; 24 while (scanf ("%s", &s) == 1) 25  { 26 int len = strlen (s); 27 int mx = -1; 28 for (int i=0; i<len; ++i) mx = max (mx, s[i] - '0'); 29 30 printf ("%d\n", mx); 31 for (int i=1; i<=mx; ++i) 32  { 33 bool ok = false; 34 for (int j=0; j<len; ++j) 35  { 36 if (s[j] == '0') 37  { 38 if (!ok) continue; 39 else printf ("0"); 40  } 41 else 42  { 43 ok = true; 44 printf ("1"); s[j]--; 45  } 46  } 47 if (i < mx) printf (" "); 48  } 49 puts (""); 50  } 51 52 return 0; 53 }

 

你可能感兴趣的:(codeforces)