1. 程式人生 > >Codeforces 1060A Phone Numbers

Codeforces 1060A Phone Numbers

打擾了,一開始題目就讀錯了。

看樣例的時候百思不得其解,反覆看題幹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;
}