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值的和 ...
随机推荐
- Android M Permission处理
Android M(6.0)相比之前的版本,做了比较多的优化与改进.其中变化最大的一点是权限管理方面的改变,即不再是应用安装时授权,而改为运行时授权机制:一直以来,系统安全都是用户非常关心的问题,而之 ...
- VScript 函数调用的两种分类:Sub过程和Function过程
来源:http://soft.zdnet.com.cn/software_zone/2007/0925/523318.shtml 在 VBScript 中,过程被分为两类:Sub 过程和 Functi ...
- oracle储存过程,job,视图,触发器(记性不好,写个例子自己记)
存储过程 create or replace procedure TestPro(Descerr out varchar2 ) is begin select * from test; excepti ...
- 开发者需要知道的11条HTML5小常识
#HTML5: The Missing Manual# 如果说HTML是一部电影,那HTML5就是一次大转折.HTML本来是不会活过21世纪的.官方Web标准组织W3C在1998年对HTML就已经撒手 ...
- jQuery动态添加元素并绑定事件
写网页的时候常常需要根据实际情况添加新的元素,然后这些新元素还需要绑定已有的事件,如:有一ul,点击其中某 li,根据其 id 或 value 等获取新的数据列表,并新建 ul 显示,新 ul 中的 ...
- OCI的结果输出
绑定变量,把结果以列的方式输出到每一字段输出到一个数组里
- [java学习笔记]java语言基础概述之运算符&程序流程控制&for循环嵌套
一.运算符 算数运算符 +,-,*,/,%,++,-- 1.+,-,*,/ 整数除以整数的结果为舍弃了小数部分的整数. 2.%:取余 %左右都为正数,左边小于右边结果为左边值,如,4%5=4 %左边大 ...
- android app widget 创建调用周期
1 ?Android widget 大小问题 2 ?RemoteViewService Android开发历程_15(AppWidget的使用) Appwidget就是手机应用中常常放在桌面(即hom ...
- jquery ListBox 左右移动
<head runat="server"> <title>无标题页</title> <script type="text/jav ...
- js 闭包 详解
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 闭包的特性 闭包有三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数 ...