Codeforces 1060A Phone Numbers
阿新 • • 發佈:2018-12-16
打擾了,一開始題目就讀錯了。
看樣例的時候百思不得其解,反覆看題幹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; }