首页 > 其他分享 >fzu_noip 1033 (作业问题-拼最大的2,3,5倍数)

fzu_noip 1033 (作业问题-拼最大的2,3,5倍数)

时间:2022-10-25 10:31:20浏览次数:57  
标签:begin end 数字 noip fzu else writeln decrease 1033


作业问题

时限:1s内存:32M

★问题描述:

小T很喜欢数学,每天老师刚布置完作业,他就开始思考,今天他遇到了困难。

现在有很多的数字,你的任务是找出由这些数字组成的最大的数,并且这个数必须能被2,3,5整除。你可以只用其中一部分的数,但不允许出现前导0。

★数据输入:

输入数据的第一行为一个整数N。(1<=N<=1000)表示给出N个数字,每个数字范围是0—9。接下来一行有N个数,数字由空格隔开。

★结果输出:

输出你找出的最大的数,如果不存在这样的数就输出-1。


输入示例

输出示例

1

0

0

11

3 4 5 4 5 3 5 3 4 4 0

5554443330

8

3 2 5 1 5 2 2 3

-1


 


裸裸的贪心。

满足能被2,5整除,当且仅当数中有0且放在末尾

满足能被3整除,要让sum%3=0.

显然要取尽可能多的位数,先判断是否能全取。

用a[i]表示数字i有几个,b[i]表示%3=i的数字有几个.

若全取后%3=1,则删1个%3=1或2个%3=2.优先删删除数字少的,次优先删数字尽量小的。

若无法全取,也不够删,则无解.

同理%3=2.

若有合法解,数字必从大到小排列。

由于不能有前导0,需特判0,0,0,0……的情况。


var
a:array[0..9] of longint;
b:array[0..2] of longint;
n,i,j,p:longint;
procedure decrease(k:longint);
begin
if (a[k]>0) then dec(a[k])
else if (a[k+3]>0) then dec(a[k+3])
else if (a[k+6]>0) then dec(a[k+6]);
end;
begin
read(n);
fillchar(a,sizeof(a),0);
for i:=1 to n do
begin
read(j);
inc(a[j]); inc(b[j mod 3]);
end;
if (a[0]=0) then
begin
writeln('-1');
halt;
end;

p:=b[1] mod 3+(b[2]*2) mod 3;
if (p=1) then
begin
if (b[1]>0) then decrease(1)
else if (b[2]>1) then begin decrease(2);decrease(2); end
else
begin
writeln('-1');
halt;
end;
end;
if (p=2) then
begin
if (b[2]>0) then decrease(2)
else if (b[1]>1) then begin decrease(1);decrease(1); end
else
begin
writeln('-1');
halt;
end;
end;

p:=0;
for i:=1 to 9 do inc(p,a[i]);
if (p=0) then
begin
writeln('0');
halt;
end;


for i:=9 downto 0 do
for j:=1 to a[i] do write(i);
writeln;







end.



标签:begin,end,数字,noip,fzu,else,writeln,decrease,1033
From: https://blog.51cto.com/u_15724837/5794119

相关文章

  • fzu_noip 1039(盖楼-线段树)
    盖楼时限:1s内存:32M★问题描述:S举办了一场盖楼比赛,有n位选手参赛,将这n位选手编号为1到n。比赛刚开始时第i位选手的房子的初始高度为Ai,每过一天该选手的房子高度增加Bi。S想......
  • 0025:2011年NOIp普及组真题——瑞士轮题解
    题目链接:https://www.luogu.com.cn/problem/P1309如果是新手可能马上会想到sort排序,每比一次就排一次,但是这样的时间复杂度有点高,只有60分;这是因为每次比完赛会产生两个......
  • NOIP2014普及组复赛参考解析
    目录P2141[NOIP2014普及组]珠心算测验P2118[NOIP2014普及组]比例简化P2239[NOIP2014普及组]螺旋矩阵P2258[NOIP2014普及组]子矩阵题目传送P2141[NOIP2014......
  • P1850 [NOIP2016 提高组] 换教室
    [NOIP2016提高组]换教室题目描述对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程。在可以选择的课程中,有\(2n\)节课程安排在\(n\)个......
  • 题解 P5527 [Ynoi2012] NOIP2016 人生巅峰
    人生第一道Ynoi,同时也是1k通过。不卡常不难写,小清新Ynoi真的不多见了。前置知识:抽屉原理,树状数组,bitset,动态规划基础。首先考虑一个事实,当这个区间够长是必然有解的......
  • NOIP2015普及组复赛参考解析
    目录P2669[NOIP2015普及组]金币P2670[NOIP2015普及组]扫雷游戏P2671[NOIP2015普及组]求和P2672[NOIP2015普及组]推销员题目传送P2669[NOIP2015普及组]金......
  • NOIP2017 普及组复赛参考解析
    目录P3954[NOIP2017普及组]成绩P3955[NOIP2017普及组]图书管理员P3956[NOIP2017普及组]棋盘P3957[NOIP2017普及组]跳房子题目传送P3954[NOIP2017普及组]......
  • [NOIP2014 提高组] 联合权值 dfs+技巧
    题意树上每个结点的权值为\(w_i\),若点\(i\)和点\(j\)满足:\(i\)和\(j\)的最短距离为2,则会产生$w_i*w_j$的联合权值。求最大联合权值和联合权值之和。分析①最大联合......
  • 做题记录整理图论/dfs P5022 [NOIP2018 提高组] 旅行(2022/10/19)
    P5022[NOIP2018提高组]旅行我只想出了部分分的解法。。。https://fzy.blog.luogu.org/solution-p5022#include<bits/stdc++.h>#definefor1(i,a,b)for(inti=a;i......
  • 做题记录整理图论/最短路/dp/记忆化搜索 P3953 [NOIP2017 提高组] 逛公园(2022/10/19)
    P3953[NOIP2017提高组]逛公园https://122720.blog.luogu.org/p3953-ti-xie-ji-yi-hua-sou-suo大佬讲得挺好的,我就不写了#include<bits/stdc++.h>#definefor1(i,a,b......