| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:偶觉得直接建查找表就可以了,空间刚好够用In Reply To:偶觉得直接建查找表就可以了,空间刚好够用 Posted by:kochat at 2007-05-14 00:42:56 i 服了 u。居然用3 个字节的 int,太bt了。
可是服务器如果是 big endian 的你怎么办?
> #include <iostream>
> #include <string>
> #include <vector>
> #include <algorithm>
> #include <functional>
> using namespace std;
>
> const int lut[] =
> {
> 2, 2, 2,
> 3, 3, 3,
> 4, 4, 4,
> 5, 5, 5,
> 6, 6, 6,
> 7, 0, 7, 7,
> 8, 8, 8,
> 9, 9, 9, 0,
> };
>
> int main()
> {
> int count;
> cin >> count;
> vector<string> vec_num;
> vec_num.reserve(count);
> string str, num_str;
> char ch;
> char* bucket = new char[10000001*3];
> memset(bucket, 0, 10000001 * 3 * sizeof(char));
>
> while ( count-- && cin >> str )
> {
> int i = 0;
> num_str = "";
> while ( (ch=str[i++])!='\0')
> {
> if ( ch == '-')
> continue;
> else if ( ch > '9')
> num_str.append(1, lut[ch-'A'] +'0');
> else
> num_str.append(1, ch);
> }
> i = atoi(num_str.c_str()) * 3;
> (*((int*)&(bucket[i])))++;
> }
>
> bool bNoDuplicate = true;
> char* p = bucket;
> char des[20];
> for ( int i = 0; i < 10000000; i++, p+=3 )
> {
> if ((count = (*((int*)p) & 0x00FFFFFF)) > 1)
> {
> bNoDuplicate = false;
> sprintf(des, "%07d %d", i, count);
> str = des;
> str.insert(3, "-");
> cout << str << endl;
> }
> }
>
> if ( bNoDuplicate )
> cout << "No duplicates." << endl;
>
> delete[] bucket;
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator