POJ1002 – 真·水题(个鬼)
这里吐槽一下POJ的g++,同一段代码用c++能过g++过不了
然后再吐槽一下这一题的那个No duplicates.
,也不清楚到底要不要给句号(事实证明要)
然后数据里面竟然会有0开头的。。。这个wa的我一脸懵逼,最后网上找到了测试数据才发现错在哪里
注:%03d
这个制表符可以右对齐然后自动补零
这题我用数组排序做的,用map做也可以,不过弱还不会用map,然后由于数比较小最大只有10000000,因此也可以开大一点的数组直接存不用排序
贴一下代码
#include <iostream>
#include <string>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector <int> telephone;
string s;
void handle(string s);
bool comparison(int a, int b);
void output();
void input();
int main()
{
input();
sort(telephone.begin(), telephone.end(), comparison);
output();
return 0;
}
bool comparison(int a, int b)
{
return (a < b);
}
void output()
{
int t = 1;
bool h = 0;
telephone.push_back(-1);
for (int i = 1; i < telephone.size(); i++) {
if (telephone[i] == telephone[i - 1])
t++;
else {
if (t > 1) {
printf("%03d-%04d %d\n", telephone[i - 1] / 10000, telephone[i - 1] % 10000, t);
t = 1;
h = 1;
}
}
}
if (!h)
cout << "No duplicates." << endl;
telephone.pop_back();
}
void input()
{
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> s;
handle(s);
}
}
void handle(string s)
{
int t = 0;
char c;
for (int i = 0; i < s.size(); i++) {
c = s[i];
if (c == '-')
;
else if (c >= '0' && c <= '9')
t = t * 10 + c - '0';
else if (c >= 'A' && c < 'Q')
t = t * 10 + (c - 'A') / 3 + 2;
else if (c > 'Q' && c < 'Z')
t = t * 10 + (c - 'A' - 1) / 3 + 2;
}
telephone.push_back(t);
}