51nod 1433 0和5

题目来源: CodeForces

基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题

 收藏

 关注

小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5。小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数。使得这个数尽可能大,而且可以被90整除。

注意:

1.这个数没有前导0,

2.小K不需要使用所有的牌。

Input

每个测试数据输入共2行。
第一行给出一个n,表示n张牌。(1<=n<=1000)
第二行给出n个整数a[0],a[1],a[2],…,a[n-1] (a[i]是0或5 ) 表示牌上的数字。

Output

共一行,表示由所给牌组成的可以被90整除的最大的数,如果没有答案则输出”-1”(没有引号)

Input示例

4
5 0 5 0

Output示例

0

根据一个性质 :若某个数的数位之和相加%9==0 则 该数能被9整除

那能被90整除也遵循这个性质 只不过需要最后有一个0

屠龙宝刀点击就送

#include <algorithm>
#include <cstdio>
using namespace std;
int Num[2],A,n;
long long maxn=-1;
int cmp(int a,int b){return a>b;}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&A);
        A==5?Num[1]++:Num[0]++;
    }
    if(!Num[0]) {printf("-1");return 0;}
    while(Num[1])
    {
        int ans=Num[1]*5;
        if(ans%9==0)
        {
            while(Num[1]--) printf("5");
            while(Num[0]--) printf("0");
            return 0;
        }
        else Num[1]--;
    }
    if(Num[0]) printf("0");
    else printf("-1");
    return 0;
}
时间: 2024-12-21 05:11:05

51nod 1433 0和5的相关文章

51nod 1433 0和5(9的倍数的规律)

1433 0和5 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 取消关注 小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5.小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数.使得这个数尽可能大,而且可以被90整除. 注意: 1.这个数没有前导0, 2.小K不需要使用所有的牌. Input 每个测试数据输入共2行. 第一行给出一个n,表示n张牌.(1<=n<=1000) 第二行给

51Nod 1433 0和5(9的倍数理论)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1433 思路: 数论中关于9的倍数的理论:若是一个数能被9整除,则各位数之和为9的倍数. 因为这题是90的倍数,所以至少得有一个0. 分别统计0和5的个数,9个5相加的话就是9的倍数,计算出能有几个9个5,剩下的0全排最后就可以了. 1 #include<iostream> 2 #include<algorithm> 3 #include<cstrin

51Nod 1433 0和5 (数论 &amp;&amp; 被9整除数的特点)

题意 : 小K手中有n(1~1000)张牌, 每张牌上有一个一位数的数, 这个字数不是0就是5.小K从这些牌在抽出任意张(不能抽0张), 排成一行这样就组成了一个数.使得这个数尽可能大, 而且可以被90整除.注意:① 这个数没有前导0.② 小K不需要使用所有的牌. 分析 : 能被9整除的数, 其各个位数相加之后的和也是9的倍数.那能被90整除的数就相当于能加多了10倍, 即末尾加上了一个0.那只要构造一个前缀有k个5(k是9的倍数), 后缀填充0即可, 这里要注意如果没有0可选是无法构造出来的

51nod 1393 0和1相等串 思路 : map存前缀和

题目: 思路:把'0'当成数字-1,'1'当成数字1,求前缀和,用map更新当前前缀和最早出现的位置.(用map而不用数组是因为可能会出现负数) 当前缀和的值之前出现过,比如i = 10时,sum = 0:j = 50时,sum = 0; 更新ans = max(ans,j-i): 代码: #include <bits\stdc++.h> using namespace std; map<int,int> m; //存前缀和最早出现的位置 int a[1000001]; //数字数

0和5

1433 0和5 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5.小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数.使得这个数尽可能大,而且可以被90整除. 注意: 1.这个数没有前导0, 2.小K不需要使用所有的牌. Input 每个测试数据输入共2行. 第一行给出一个n,表示n张牌.(1<=n<=1000) 第二行给出n个

Linux命令(33):netstat命令-显示网络端口信息

netstat命令 功能说明 netstat命令用来显示本机网络连接.运行端口和中由表等信息,用法如下: netstat [选项] 常用参数 选项 说明 -a 显示本机所有连接和监听端口 -n 以网络IP地址的形式显示当前建立的有效连接和端口 -r 显示路由表信息 -s 显示按协议的统计信息.默认情况下,将显示IP.IPV6.ICMP.ICMPv6.TCP.TCPv6.UDP和UDPv6的统计信息 -v 显示当前的有效连接,与"-n"选项类似 -t 显示所有的TCP协议连接情况 -u

poj1379+POJ2420+hdu3932(最短距离+费马点+模拟淬火算法)

Run Away Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5632   Accepted: 1729 Description One of the traps we will encounter in the Pyramid is located in the Large Room. A lot of small holes are drilled into the floor. They look complet

windows下常查看端口占用方法总结

启动Tomcat时又出现端口占用错误.现在把对端口的处理命令和方法进行汇总. 1.查看所有连接的PID 开始--运行--cmd  ,输入netstat -ano 找到端口号对应的PID后,从任务管理器中停止PID对应程序. 2.查看占用1433端口程序 ①先C:>netstat -ano|findstr "1433" TCP 127.0.0.1:1433   0.0.0.0       LISTENING     4984 ②再C:>tasklist|findstr &qu

怎样查看端口占用情况

步骤/方法 开始-运行-输入cmd-打开命令行窗口   输入:netstat -aon|findstr "端口号" 如输入netstat -aon|findstr "1433",回车,有以下信息显示TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING 1956 其中"1956"为占用"1433"端口的进程号 3 输入:tasklist|findstr "进程号" 如输入tasklist|