又臭又长的烂代码 ......

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define maxn 1010 using 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);
}
else
puts("0");
}
else
puts("impossible");
}
return 0;
}

spoj 416的更多相关文章

  1. SPOJ 416 Divisibility by 15 细节题

    一个结论:一个数,如果它的所有数字之和能被3整除,那么这个数也能被3整除. 最后一位肯定是0或者5,如果没有就impossible. 剩下的就是,如何删除尽量少的数,使所有数字之和为3的倍数. 情况比 ...

  2. SPOJ 416 - Divisibility by 15(贪心)

    糟烂的代码啊...  这个题目思路很简单——末位只可能为0和5,所有数字的和肯定被3整除 没有0和5的肯定不行 否则,把所有数字求和 如果被3整除,则从大到小输出 如果除3余1,则按以下顺序——删1: ...

  3. BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 5217  Solved: 1233 ...

  4. SPOJ DQUERY D-query(主席树)

    题目 Source http://www.spoj.com/problems/DQUERY/en/ Description Given a sequence of n numbers a1, a2, ...

  5. SPOJ GSS3 Can you answer these queries III[线段树]

    SPOJ - GSS3 Can you answer these queries III Description You are given a sequence A of N (N <= 50 ...

  6. 【填坑向】spoj COT/bzoj2588 Count on a tree

    这题是学主席树的时候就想写的,,, 但是当时没写(懒) 现在来填坑 = =日常调半天lca(考虑以后背板) 主席树还是蛮好写的,但是代码出现重复,不太好,导致调试的时候心里没底(虽然事实证明主席树部分 ...

  7. SPOJ bsubstr

    题目大意:给你一个长度为n的字符串,求出所有不同长度的字符串出现的最大次数. n<=250000 如:abaaa 输出: 4 2 1 1 1 spoj上的时限卡的太严,必须使用O(N)的算法那才 ...

  8. HTTP状态码206和416

    HTTP 2xx范围内的状态码表明了:"客户端发送的请求已经被服务器接受并且被成功处理了". TTP/1.1 200 OK是HTTP请求成功后的标准响应 HTTP/1.1 206状 ...

  9. 【SPOJ 7258】Lexicographical Substring Search

    http://www.spoj.com/problems/SUBLEX/ 好难啊. 建出后缀自动机,然后在后缀自动机的每个状态上记录通过这个状态能走到的不同子串的数量.该状态能走到的所有状态的f值的和 ...

随机推荐

  1. 相对完美的后台Service实现播放音乐功能

    对于用Context.startService()启动的service生命周期为onCreate()-onStartCommand()-onDestroy();如果多次用context.startSe ...

  2. JAVA之经典Student问题1

    通过“三目运算符”求最大值与最小值. class student { //定义学生编号 private String stu; //学生姓名 private String name; //学生书信成绩 ...

  3. 解释清楚c++的重载操作符【用自己的话,解释清楚】

    C++中对于内置的变量及标准库中常见的类定义类常见的操作符含义,对于自定义的类也可以通过关键字operate 重载操作符的含义. C++中支持重载的目的 诚然操作符的重载可以通过使用函数实现同样的功能 ...

  4. Memcached 安装配置

    安装: memcached -d install memcached -d start net start "Memcached Server" 卸载: memcached -d ...

  5. IOS中的内存不足警告处理(译)

    由于在IOS中虚拟内存系统不会采用页置换的方式来获取请求内存,取而代之的是它通过移除应用程序中的强引用来释放一些内存资源,我们知道强引用在IOS中表示拥有关系,只要有至少一个变量拥有这个对象,那么对象 ...

  6. (转)Single Instance Form in a MDI application

    private void OpenForm<T>() where T : Form, new() { T frm = (T)new List<Form>(this.MdiChi ...

  7. Oracle常见的问题

    1.oracle 中文问号乱码解决方法: 在系统变量里面添加变量名:NLS_LANG 变量值:  SIMPLIFIED CHINESE_CHINA.ZHS16GBK 2.查询oracle 里的主键 S ...

  8. Java+Mysql+学生管理系统

    最近正在学java和数据库,想起以前写的学生管理系统,都是从网上下载,敷衍了事.闲来无事,也就自己写了一个,不过功能实现的不是很多. 开发语言:java: 开发环境:Mysql, java: 开发工具 ...

  9. 公交CPU卡原理

    现在的公交卡已经开始逐步的采用IC卡(CPU卡?什么东东?),而且在国家交通部的推动下,开始了全国范围内的互联互通.以后,手里只用拿着一张卡,就可以走遍全国,而且如果支持在线充值的话,基本上就不用在车 ...

  10. iOS进阶——App生命周期

    State Description Not running The app has not been launched or was running but was terminated by the ...