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
欢迎交流、讨论、指正~
不正确、不理解之处欢迎评论留言~