0
点赞
收藏
分享

微信扫一扫

P2192 HXY玩卡片[洛谷]

mm_tang 2022-08-13 阅读 34


P2192 HXY玩卡片[洛谷]

  • ​​1.题目​​
  • ​​2.分析​​
  • ​​3.代码​​
  • ​​数组实现​​
  • ​​map​​
  • ​​补充:map的简单用法​​
  • ​​4.总结​​
  • ​​5.更新日志​​

1.题目

​​题目链接​​

题目描述

HXY得到了一些卡片,这些卡片上标有数字 。现在她可以选择其中一些卡片排成一列,使得排出的一列数字组成的数最大,且满足被 整除这个条件。同时,这个数必须为合法的某个非负整数,即不能含有前导 ,即 不能作为这串数的首位。但是特殊地,整数 满足条件。如果不能排出这样的数,输出“”。

输入格式

第一行,卡片的个数

第二行,分别给出了这 个数(只能为数字

输出格式

仅一行,如果可以排出,则输出这个数。否则输出-1

样例 #1

样例输入 #1

4
5 0 5 0

样例输出 #1

0

样例 #2

样例输入 #2

11
5 5 5 5 5 5 5 5 0 5 5

样例输出 #2

5555555550

样例 #3

样例输入 #3

2
5 5

样例输出 #3

-1

提示

数据范围:

对于 的数据,

对于 的数据,仅含数字

对于 的数据,

2.分析

被90整除的条件:
各数位之和为9的倍数、末尾为0

3.代码

数组实现

#include <iostream>
using namespace std;
//被90整除的条件: 各位之和为9的倍数,末尾是0
int cnt[2];
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; ++i)
{
int t;
scanf("%d", &t);
if (t) cnt[1]++;
else cnt[0]++;
}
if (!cnt[0]) //无0
puts("-1");
else {
if (cnt[1] >= 9) { //符合被90整除
int t = cnt[1] - cnt[1] % 9;
while (t)
printf("5"), t--;
while (cnt[0])
printf("0"), cnt[0]--;
}
else
puts("0");
}
return 0;
}

map

//P2192 HXY玩卡片
#include <iostream>
using namespace std;
#include <map>
typedef map<int, int> MII;
int main()
{
MII cards;
int n;
scanf("%d", &n);
for (int i = 0; i < n; ++i)
{
int t;
scanf("%d", &t);
cards[t]++;
}
if (!cards[0]) puts("-1");
else {
cards[5] /= 9;
if (!cards[5]) puts("0");
else {
while (cards[5]--)
printf("555555555");
while (cards[0]--)
printf("0");
}
}
return 0;
}

补充:map的简单用法

​​跳转至 C++map的用法​​

4.总结

掌握必要的STL对做题有帮助~

5.更新日志

2022.8.7

欢迎交流、讨论、指正~
不正确、不理解之处欢迎评论留言~


举报

相关推荐

洛谷p1135

洛谷p1551

洛谷P1309

洛谷 P1307

P1217(洛谷)

洛谷p1443

洛谷P1090

洛谷P2084

洛谷 P1001

0 条评论