本文主要是介绍spoj 416,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
又臭又长的烂代码 ......
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define maxn 1010using namespace std;char a[1010];
int num[10],last;//bool cc(int sum)
//{
// if(sum%3 == 0)
// return true;
// else if(sum % 3 == 1)
// {
// int v;
// for(v = 0; v < 3; v++)
// if(num[v*3+1])
// break;
// if(v == 3)
// {
// int tt = 2;
// for(int k = 0; tt && k < 3; k++)
// while(tt && (num[k*3+2]))
// {
// num[k*3+2]--;
// tt--;
// }
// if(tt)
// return false;
// }
// else
// num[v*3+1]--;
// }
// else
// {
// int v;
// for(v = 0; v < 3; v++)
// if(num[v*3+2])
// break;
// if(v == 3)
// {
// int tt = 2;
// for(int k = 0; tt && k < 3; k++)
// while(tt && (num[k*3+1]))
// {
// num[k*3+1]--;
// tt--;
// }
// if(tt)
// return false;
// }
// else
// num[v*3+2]--;
// }
// return true;
//}
bool cc(int sum)
{if(sum%3 == 0)return true;else if(sum % 3 == 1){if(num[1]){num[1]--;return true;}else if(num[4]){num[4]--;return true;}else if(num[7]){num[7]--;return true;}else if(num[2] >= 2){num[2] -= 2;return true;}else if(num[2] && num[5]){num[2]--;num[5]--;return true;}else if(num[2] && num[8]){num[2]--;num[8]--;return true;}else if(num[5] >= 2){num[5] -= 2;return true;}else if(num[8] && num[5]){num[5]--;num[8]--;return true;}else if(num[8] >= 2){num[8] -= 2;return true;}}else{if(num[2]){num[2]--;return true;}else if(num[5]){num[5]--;return true;}else if(num[8]){num[8]--;return true;}else if(num[1] >= 2){num[1] -= 2;return true;}else if(num[1] && num[4]){num[1]--;num[4]--;return true;}else if(num[1] && num[7]){num[1]--;num[7]--;return true;}else if(num[4] >= 2){num[4] -= 2;return true;}else if(num[4] && num[7]){num[4]--;num[7]--;return true;}else if(num[7] >= 2){num[7] -= 2;return true;}}return false;
}
bool findd(int sum)
{if(!num[0] && !num[5])return false;if(!num[0]){num[5]--;last = 5;return cc(sum);}else{num[0]--;last = 0;return cc(sum);}return false;
}
int main()
{int t;//freopen("d:/out.txt", "r", stdin);//freopen("in.txt", "w", stdout);scanf("%d",&t);while(t--){memset(num, 0, sizeof(num));scanf("%s",a);int len = strlen(a);int sum = 0;for(int i = 0; i < len; i++){sum += a[i] - '0';num[a[i]-'0']++;}last = 0;bool flag = findd(sum);int flag2 = 0;if(flag){for(int i = 9; i >= 1; i--){for(int j = 0; j < num[i]; j++){flag2 = 1;printf("%d",i);}}if(flag2){for(int j = 0; j < num[0]; j++){printf("%d",0);}printf("%d\n",last);}elseputs("0");}elseputs("impossible");}return 0;
}
这篇关于spoj 416的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!