POJ 1002

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1002相关的知识,希望对你有一定的参考价值。

题目链接:http://poj.org/problem?id=1002

可能的WA点, 我当时错懵逼了, 在把可能的原因都处理了:

1."No duplicates."的拼写, 注意 ‘.‘ 的存在;

2.若用字符串存储,字符串开大点, 最好是30以上,我为了保险, 开了200;

3.据说要处理字母 ‘Q‘, ‘Z‘!? 从其他大牛的博客里看到的;

4.据说cin, cout会有错误/超时!? 所以改用 scanf, printf;

5.提交时, 选择C++会WA, 而G++就通过, 懵逼 X N....

超时:

1.同上4.

2.排序写的不好(原本快排一次码成功挺开心的,没想到超时, 只好用了内置sort)

 

接下来, 我的懵逼历程:

先上图

技术分享

 

上我改进后的代码:

尽管看过网上大牛们的精简代码, 还是斗胆把自己的烂代码丢了出来,

不足:trans()写的太繁琐, 手写的快排会超时....

 

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <algorithm>
 5 #include <cstdio>
 6 using namespace std;
 7 
 8 int n;
 9 char s[150 + 2];
10 int num[100000 + 2];
11 
12 int trans(char c, int &bits)
13 {
14     if(c == -) return 0;
15     bits++;
16     if(c >= 0 && c <= 9) return c - 48;
17     else if(c >= A && c <= C) return 2;
18     else if(c >= D && c <= F) return 3;
19     else if(c >= G && c <= I) return 4;
20     else if(c >= J && c <= L) return 5;
21     else if(c >= M && c <= O) return 6;
22     else if(c >= P && c <= S && c != Q) return 7;
23     else if(c >= T && c <= V) return 8;
24     else if(c >= W && c <= Y) return 9;
25 }
26 
27 bool cmp(int a, int b) {return a < b;}
28 
29 void tran_print(int temp)
30 {
31     for(int i = 7; i >= 1; i--)
32     {
33         if (i == 4) printf("-");
34         printf("%d", temp / (int)pow(10.0, i - 1));
35         temp = temp % (int)pow(10.0, i - 1);
36     }
37 }
38 
39 int main()
40 {
41     scanf("%d", &n);
42     for(int i = 1; i <= n; i++)
43     {
44         scanf("%s", &s);
45         int bits = 0;
46         for(int r = strlen(s) - 1; r >= 0; r--)
47             num[i] += trans(s[r], bits) * (int)pow(10.0, bits - 1);
48     }
49     
50     sort(num + 1, num + n + 1, cmp);
51     
52     int number = 1;
53     bool flag = false;
54     
55     for(int i = 2; i <= n; i++)
56     {
57         if (num[i - 1] == num[i]) number++, flag = true;
58         if((num[i - 1] != num[i] || i == n) && number != 1)
59             tran_print(num[i - 1]), printf(" %d\n", number), number = 1;
60     }
61     if(!flag) printf("No duplicates.\n");
62     
63     return 0;    
64 }

 

以上是关于POJ 1002的主要内容,如果未能解决你的问题,请参考以下文章

POJ 1002

poj1002-487-3279

POJ 1002 487-3279

[POJ] #1002# Exponentiation : 大数乘法

POJ-1002-JAVA

POJ 1002 ??????