spoj 416
又臭又长的烂代码 ......
#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的更多相关文章
- SPOJ 416 Divisibility by 15 细节题
一个结论:一个数,如果它的所有数字之和能被3整除,那么这个数也能被3整除. 最后一位肯定是0或者5,如果没有就impossible. 剩下的就是,如何删除尽量少的数,使所有数字之和为3的倍数. 情况比 ...
- SPOJ 416 - Divisibility by 15(贪心)
糟烂的代码啊... 这个题目思路很简单——末位只可能为0和5,所有数字的和肯定被3整除 没有0和5的肯定不行 否则,把所有数字求和 如果被3整除,则从大到小输出 如果除3余1,则按以下顺序——删1: ...
- 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 ...
- SPOJ DQUERY D-query(主席树)
题目 Source http://www.spoj.com/problems/DQUERY/en/ Description Given a sequence of n numbers a1, a2, ...
- 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 ...
- 【填坑向】spoj COT/bzoj2588 Count on a tree
这题是学主席树的时候就想写的,,, 但是当时没写(懒) 现在来填坑 = =日常调半天lca(考虑以后背板) 主席树还是蛮好写的,但是代码出现重复,不太好,导致调试的时候心里没底(虽然事实证明主席树部分 ...
- SPOJ bsubstr
题目大意:给你一个长度为n的字符串,求出所有不同长度的字符串出现的最大次数. n<=250000 如:abaaa 输出: 4 2 1 1 1 spoj上的时限卡的太严,必须使用O(N)的算法那才 ...
- HTTP状态码206和416
HTTP 2xx范围内的状态码表明了:"客户端发送的请求已经被服务器接受并且被成功处理了". TTP/1.1 200 OK是HTTP请求成功后的标准响应 HTTP/1.1 206状 ...
- 【SPOJ 7258】Lexicographical Substring Search
http://www.spoj.com/problems/SUBLEX/ 好难啊. 建出后缀自动机,然后在后缀自动机的每个状态上记录通过这个状态能走到的不同子串的数量.该状态能走到的所有状态的f值的和 ...
随机推荐
- 每天一道LeetCode--141.Linked List Cycle(链表环问题)
Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...
- 【网络收集】MySql中IS NOT NULL与!=NULL的区别
在mysql中,筛选非空的时候经常会用到is not null和!=null,这两种方法单从字面上来看感觉是差不多的,其实如果去运行一下试试的话差别会很大!为什么会出现这种情况呢?null 表示什么也 ...
- CSS之导航菜单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JSON对象(自定义对象)
JSON对象(自定义对象) 1.什么是JSON对象 JSON对象是属性的无序集合,在内存中也表现为一段连续的内存地址(堆内存) 1)JSON对象是属性的集合 2)这个集合是没有任何顺序的 2.JSON ...
- feature.shape和feature.shapecopy的区别
以前在写AE代码的时候也没有注意到feature.shape和feature.shapecopy的区别,觉得两者也差不多: 今天写入库程序才明白过来. 如果取feature.shape,则得到的是该要 ...
- Xamarin 实现android gridview 多选
参考文章:http://blog.csdn.net/zhouyuanjing/article/details/8372686 GridView初始化代码: gridViewStudent = Find ...
- CentOS 下安装JDK
前提条件 使用干净的centOS 之前肯定没有装过JDK 所以忽略卸载步骤 <1>从SUN下载jdk-1_5_0_14-linux-i586-rpm.bin或jdk-1_5_0_14-li ...
- JS中的!=、== 、!==、===的用法和区别。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var num = 1; var str = '1'; var test = 1; t ...
- C#实现网络传输数据加密
1. 分组密码 分组密码是将明文消息编码表示后数字序列划分成长为n的分组,各组分别在密钥的作用下进行变换输出等长的数字序列,即密文.一次加密一个数据组,加解密所使用的是同一密钥,故其通常也称为对称加密 ...
- AngularJS快速开始
Hello World! 开始学习AngularJS的一个好方法是创建经典应用程序“Hello World!”: 使用您喜爱的文本编辑器,创建一个HTML文件,例如:helloworld.html. ...