poj_1002大神版
2016-04-15 01:02
246 查看
这是poj上某大神发的,精辟简洁,转来膜拜之。
#include <cstdio> #include <algorithm> using namespace std; char s[31]; int Hash() { int sum=0; for(int i=0,k=0;k<7;i++) { if(s[i]>='0'&&s[i]<='9') { sum*=10;k++; sum+=(s[i]-'0'); } else if(s[i]>='A'&&s[i]<'Z') { sum*=10;k++; sum+=((s[i]-'A'-(s[i]>'Q'))/3+2); } } return sum; } int main() { int n;scanf("%d",&n); int data ;getchar(); for(int tmp=0;tmp<n;tmp++) { gets(s); data[tmp]=Hash(); } sort(data,data+n); bool p=false;n--; for(int i=0,num=1;i<n;i+=num=1) { while(data[i]==data[i+1]) { num++; i++; } if(num>1) { printf("%03d-%04d %d\n",data[i]/10000,data[i]%10000,num); p=true; } } if(!p)printf("No duplicates.\n"); return 0; }
参考别人的写法,不容易超时
#include <iostream>#include <cstdio>#include <cstring>#include <set>#include <map>using namespace std;int num[] ={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};map<int, int> s;char buf[128];int main(){int t;scanf("%d", &t);bool flag = false;for(int i = 0; i < t; i++){scanf("%s", &buf);int c = 0;for(int j = 0; buf[j]; j++){if(isdigit(buf[j]))c = c * 10 + buf[j] - '0';else if(isalpha(buf[j]))c = c * 10 + num[ buf[j] - 'A' ];}s[c]++;}for(map<int, int>::iterator it = s.begin(); it != s.end(); it++)if(it->second > 1){flag = true;printf("%03d-%04d %d\n", it->first / 10000, it->first % 10000, it->second);}if(!flag)puts("No duplicates.");return 0;}
相关文章推荐
- 读书笔记 第2章 数据挖掘概述
- hdu 3011
- MYSQL命令cmd操作
- springMVC工作原理
- Shell - 14
- 关于给定栈求出所有合法栈的思考
- SQLSERVER 2008 R2 事务日志已满
- 2013年国际“云先锋”系列公司
- Python编程语言主要应用领域介绍
- 2013年国际“云先锋”系列公司
- Android开发笔记之《JNI常用知识汇总》
- CodeAtlas For Sublime Text
- BZOJ4527 : K-D-Sequence
- WebService运行原理
- Linux makefile 教程 非常详细,且易懂
- 基于iCamera测试模拟摄像头-TVP5150模块小结
- poj_1002超时版
- JS事件驱动机制
- skip-grant-tables的作用
- 20145210 实验二 实验报告