版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/polanwind/article/details/83181051
打扰了,一开始题目就读错了。
看样例的时候百思不得其解,反复看题干N多遍,都要看吐了,实在没发现自己哪里理解错了。
但是不行啊,自己理解的题意连样例也通不过!!
这可是A题啊,水题啊,5000+人通过的!
好了,上google翻译吧。
.......
Each card must be used in at most one phone number。
Google翻译:每张卡最多只能使用一个电话号码(有点生硬23333)
我的翻译:每张卡最多只能当作一个电话数字
看起来一样?我理解的是每张卡片可以出现在不同的电话号码里!
为什么我会这样理解呢?不怪我啊!这题目**后面还有神补刀!
The phone numbers do not necessarily have to be distinct.
电话号码不需要不同,也就是存在相同的电话号码。
看起来很奇怪的要求吧?为什么会这样呢?肯定是因为卡片是不同的啊!
比如说第一个样例:
INPUT
11
00000000008
OUTPUT
1
我:??????
怎么可能是1呢?8肯定被固定在首位,但是剩下的0可以随便排啊?!
在我看来,每张卡片是“不同的”,尽管它们代表的数字是相同的!
电话号码里面的数字虽然一样,但是卡片不是一样的啊!
卡片位置不同→电话号码不同,多自然的想法!
我还在想,虽然给的n的范围是从1到100,万一给100个8怎么办...
随便排啊,long long都不好使啊,这还是A题吗!
结果....
题意理解错了啊喂!
卡片不能重复使用在"不同"的电话号码里面啊!
啊啊啊啊啊啊!
事实证明,A题还是水题的!
如果你想了很长时间没有想出来,
不妨看看题意有没有读错!!!!!!!!!!!
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <algorithm>
#include <deque>
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int n;
char s[105];
int temp[10];
int main() {
scanf("%d", &n);
scanf("%s", &s);
int ans = 0;
for (int i = 0;i < 10;++i) {
temp[i] = 0;
}
for (int i = 0;i < n;++i) {
temp[s[i] - 48]++;
}
if (n <= 10 || temp[8] == 0) {
printf("0\n");
}
else {
int leftnumber = n - temp[8];
int most = leftnumber / 10;
if (temp[8] >= most) {
ans += most;
temp[8] -= most;
leftnumber = leftnumber - 10 * most;
if (temp[8] + leftnumber >= 11) {
ans++;
temp[8] = temp[8] - (11 - leftnumber);
if (temp[8] >= 11) {
ans += (temp[8] / 11);
}
}
}
else {
ans = temp[8];
}
printf("%d\n", ans);
}
//system("pause");
return 0;
}