poj1002 487-3279
2014-01-01 13:13
190 查看
这题目思路很清晰,qsort+swith,case+结构体。写完以后很速度的给我tle了。
然后我就各种改,始终没有改进的就是qsort,我就各种纠结,之前一直以为qsort和sort差不多速度,然后我去disscuss那里看大神的代码。发现了2种很巧妙的处理方式
一种是hash[26]={2,2,2,......8,8};这种的,用c-'A'来代表键值,然后就对应到相应的按键了。
第二种是一种巧妙的处理方式 res+=((str[i]-'A'-(str[i]>'Q'))/3+2);
第三种就是我自己写的那个啦,swith,case。
然后我发现我用了第二种巧妙的方法以后仍然超时?结构体?我又改掉了结构体,无奈了,最后发现我的是sort,他的是qsort,我抱着试一试的态度改掉了。出乎意料的AC了。我又把我之前自己写的代码,把qsort改成了sort,ac了,就是下面第一个代码。
通过这个我发现上述第二种真巧妙啊!果然差距一下子就出来了,orz,学习了。
我下面写上2种代码,一种代码是我自己写的,另一种就是借鉴别的更多的。
借鉴别人的,这个516ms,我的500ms还是我的快,哈哈
然后我就各种改,始终没有改进的就是qsort,我就各种纠结,之前一直以为qsort和sort差不多速度,然后我去disscuss那里看大神的代码。发现了2种很巧妙的处理方式
一种是hash[26]={2,2,2,......8,8};这种的,用c-'A'来代表键值,然后就对应到相应的按键了。
第二种是一种巧妙的处理方式 res+=((str[i]-'A'-(str[i]>'Q'))/3+2);
第三种就是我自己写的那个啦,swith,case。
然后我发现我用了第二种巧妙的方法以后仍然超时?结构体?我又改掉了结构体,无奈了,最后发现我的是sort,他的是qsort,我抱着试一试的态度改掉了。出乎意料的AC了。我又把我之前自己写的代码,把qsort改成了sort,ac了,就是下面第一个代码。
通过这个我发现上述第二种真巧妙啊!果然差距一下子就出来了,orz,学习了。
我下面写上2种代码,一种代码是我自己写的,另一种就是借鉴别的更多的。
#include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #include <algorithm> using namespace std; int change(char str[]){ int l=strlen(str); int i; int res=0; int k; char c; for(i=0;i<=l;++i){ if(str[i]>='0'&&str[i]<='9'){ res=res*10+str[i]-'0'; continue; }else if(str[i]>='A'&&str[i]<='Z'){ res=res*10; res+=((str[i]-'A'-(str[i]>'Q'))/3+2); } } return res; } int res[10000000]; /* int cmp(const void *p1,const void *p2){ return *((int *)p2) < *((int *)p1)?1:-1; } */ int cmp(int a,int b){ return a<b; } int main(){ char str[100]; int n,i,j; int t; int cnt; while(~scanf("%d",&n)){ for(i=0;i<n;++i){ scanf("%s",str); t=change(str); res[i]=t; } // qsort(res,n,sizeof(res[0]),cmp); sort(res,res+n,cmp); int sign=0; int tmp=res[0]; int haha=1; for(i=1;i<n;++i){ if(res[i]!=tmp){ if(haha>1){ printf("%03d-%04d %d\n",tmp/10000,tmp%10000,haha); sign=1; } tmp=res[i]; haha=1; }else { haha++; } } if(haha>1){ printf("%03d-%04d %d\n",tmp/10000,tmp%10000,haha); sign=1; } if(sign==0) printf("No duplicates.\n"); } return 0; }
借鉴别人的,这个516ms,我的500ms还是我的快,哈哈
相关文章推荐
- POJ1002-487-3279
- POJ1002--487-3279 翻译
- poj1002 487-3279(电话号码重复次数)
- 快速排序 487-3279 poj1002
- POJ1002 487-3279【查表】(Bailian1002, Bailian2974)
- poj1002 487-3279 (简单字符串处理)
- POJ1002 487-3279 直接哈希模拟
- POJ1002 487-3279
- poj1002“487-3279”解题报告
- POJ1002-487-3279
- POJ1002_487-3279(快速排序)
- POJ1002 487-3279
- poj1002-487-3279(字符串处理)
- POJ1002-487-3279 map应用
- poj1002 487-3279
- POJ1002-487-3279
- POJ1002--487-3279 翻译
- 487-3279 WA 郁闷
- poj1002——487-3279
- POJ 1002 487-3279 解题报告