Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

痛苦AC留恋 TLE请参考

Posted by gjl87910lq at 2009-05-15 16:35:26 on Problem 1002
//痛苦AC。。特此留恋,TLE的请参考。
//首先声明我是一个大菜鸟。
//一个晚上加一个上午加半个下午,查了N多资料。。终于AC了。。
//最主要我还是拿手机交题的,交一次题还得来回抽插内存卡,不容易啊!!!
//没AC的时候还好说,AC的那一刹那我都疯了。。
//我的主要问题是TLE
//第一次TLE是因为冒泡太慢。。
//第二次自己写了个先查找后冒泡的算法,还是不行。
//第三次去Discuss看到了STL的字眼,开始查STL排序的用法。
//慢慢的学会了用STL里的sort()排字符串。修改程序提交,还是TLE。
//第四次,考虑到输入数据太大,开始优化输入。由一开始的n个if优化到
//现在这个样子。开始在本地测试,从文件读100000组数据,再输出结果,
//本地运行时间1790ms,提交,还是TLE,疯。。。
//(我的IDE用的是CodeBlocks,可以看程序运行时间)。
//第五次,着手把cin cout改成scanf printf。发现scanf不能像cin那样读string,
//又改程序。后来用char a[n][100]
//发现char a[n][100]要初始化,不然得不到正确结果。
//于是初始化成a[100001][100]={""};但是我的IDE报错说
//a[100001][100]这里的100001太大,我又一次疯。。
//接着就是反复修改提交 + TLE N次。
//最后抱着背水一站的心态 改成a[100001][100](本地会报数组开太大的错),
//提交的时候选择C++(平时都用G++);竟然AC了。。。这下彻底疯了。。。
//其实都想到了再不AC就去学map了。。。
//Memory:12748K Time:610MS Lang:C++(实际上是G++,提交的时候选C++才会通过)
//CodeLength:1239B
//写那么多,就当作个人发泄,让各位见笑了。
#include <stdio.h>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int n;
    scanf("%d",&n);
    char a[100001][100]={""};
    vector<string> b(a,a+n);
    char read[26]={'2','2','2','3','3','3','4','4','4','5','5','5',
                    '6','6','6','7','@','7','7','8','8','8','9','9','9'};
    for(int i=0;i<n;i++)
    {
        scanf("%s",a[i]);
    }

    for(int i=0;i<n;i++)
    {
        int tmp=0;
        for(int j=0;j<7;j++)
        {
            while(a[i][tmp]=='-') {tmp++;}
            int t=a[i][tmp]-65;
            if(t>=0)
                {b[i]+=read[t];}
            else
                {b[i]+=a[i][tmp];}
            tmp++;
        }

    }

    sort(b.begin(),b.end());


    int tmp=0;
    int flag=0;
    for(int i=0;i<n;i++)
    {

        if(i+1>=n||b[i]!=b[i+1])
        {
            if((i+1-tmp)!=1)
            {
                printf("%c%c%c%c%c%c%c%c %d\n",b[i][0],b[i][1],b[i][2]
                ,'-',b[i][3],b[i][4],b[i][5],b[i][6],i+1-tmp);
                flag=1;
            }
            tmp=i+1;
        }

    }
    if(flag==0)
        printf("No duplicates.\n");



    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator