http://poj.org/problem?id=1002

这道题耗时一整天,终于搞定了。这道题一开始写的是超时,最后懂了,问题原因是有二重循环加strcmp比较,时间复杂度是O(n^3)所以超时了。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
char PanCh(char ch);
struct point{
char str[15];
int num;
};
int n;
char a[100005][150];
vector<point> vec;
bool Comp(const  point &a,const point &b)
{return strcmp(a.str,b.str)<0;
}
int main(){scanf("%d",&n);for(int i=0;i<n;i++){scanf("%s",a[i]);}for(int i=0;i<n;i++){int len=strlen(a[i]);char b[15];int k=0;for(int j=0;j<len;j++){if(a[i][j]=='-') continue;else if(k==3) {b[k++]='-';b[k++]=PanCh(a[i][j]);}else b[k++]=PanCh(a[i][j]);}b[k++]='\0';if(vec.size()==0) {point po;po.num=1;strcpy(po.str,b);vec.push_back(po);}else{for(int i=0;i<vec.size();i++){if(strcmp(b,vec.at(i).str)==0){vec.at(i).num++;break;}else if(i==vec.size()-1){point po;po.num=1;strcpy(po.str,b);vec.push_back(po);break;}}}}int flag=0;sort(vec.begin(),vec.end(),Comp);for(int i=0;i<vec.size();i++){if(vec.at(i).num!=1){printf("%s %d\n",vec.at(i).str,vec.at(i).num);flag=1;}}if(flag==0)puts("No duplicates.");return 0;
}
char PanCh(char ch){if(ch=='A'||ch=='B'||ch=='C'){return '2';}else if(ch=='D'||ch=='E'||ch=='F'){return '3';}else if(ch=='G'||ch=='H'||ch=='I'){return '4';}else if(ch=='J'||ch=='K'||ch=='L'){return '5';}else if(ch=='M'||ch=='N'||ch=='O'){return '6';}else if(ch=='P'||ch=='R'||ch=='S'){return '7';}else if(ch=='T'||ch=='U'||ch=='V'){return '8';}else if(ch=='W'||ch=='X'||ch=='Y'){return '9';}return ch;
}

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
char PanCh(char ch);
struct point{
char str[20];
int num;
};
int sum;
point points[100005];
int n;
char a[100005][150];
bool Comp(const  point &a,const point &b)
{return strcmp(a.str,b.str)<0;
}
int main(){sum=0;freopen("a.txt","r",stdin);scanf("%d",&n);for(int i=0;i<n;i++){scanf("%s",a[i]);}for(int i=0;i<n;i++){int len=strlen(a[i]);char b[15];int k=0;for(int j=0;j<len;j++){if(a[i][j]=='-'||a[i][j]=='Q'||a[i][j]=='Z') continue;else if(k==3) {b[k++]='-';b[k++]=PanCh(a[i][j]);}else b[k++]=PanCh(a[i][j]);}b[k++]='\0';if(sum==0) {point po;po.num=1;strcpy(po.str,b);points[sum]=po;sum++;}else{for(int i=0;i<sum;i++){if(strcmp(b,points[i].str)==0){points[i].num++;break;}else if(i==sum-1){point po;po.num=1;strcpy(po.str,b);points[sum]=po;sum++;break;}}}}sort(points,points+sum,Comp);int flag=0;for(int i=0;i<sum;i++){if(points[i].num!=1){flag=1;printf("%s %d\n",points[i].str,points[i].num);}}if(flag==0) printf("No duplicates.\n");return 0;
}
char PanCh(char ch){if(ch=='A'||ch=='B'||ch=='C'){return '2';}else if(ch=='D'||ch=='E'||ch=='F'){return '3';}else if(ch=='G'||ch=='H'||ch=='I'){return '4';}else if(ch=='J'||ch=='K'||ch=='L'){return '5';}else if(ch=='M'||ch=='N'||ch=='O'){return '6';}else if(ch=='P'||ch=='R'||ch=='S'){return '7';}else if(ch=='T'||ch=='U'||ch=='V'){return '8';}else if(ch=='W'||ch=='X'||ch=='Y'){return '9';}return ch;
}

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<map>
#include<iomanip>
using namespace std;
char PanCh(char ch);
int sum;
int n;
char a[100005][150];
map<int,int> ma;
int main(){sum=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%s",a[i]);}for(int i=0;i<n;i++){int len=strlen(a[i]);char b[15];int k=0;for(int j=0;j<len;j++){if(a[i][j]=='-') continue;else b[k++]=PanCh(a[i][j]);}b[k++]='\0';int num= atoi(b);map<int ,int>::iterator l_it;l_it=ma.find(num);if(l_it==ma.end()){ma.insert(pair<int,int>(num,1));}else{ma[num]++;}}int flag=0;map <int,int>::iterator m1_Iter;for ( m1_Iter = ma.begin( );m1_Iter != ma.end( ); m1_Iter++ ){if(m1_Iter->second!=1){int k=m1_Iter->first;int time=m1_Iter->second;flag=1;cout<<setfill('0')<<setw(3)<<k/10000;cout<<'-';cout<<setfill('0')<<setw(4)<<k%10000;cout<<' '<<time<<endl;}}if(flag==0)  printf("No duplicates.\n");return 0;
}
char PanCh(char ch){if(ch=='A'||ch=='B'||ch=='C'){return '2';}else if(ch=='D'||ch=='E'||ch=='F'){return '3';}else if(ch=='G'||ch=='H'||ch=='I'){return '4';}else if(ch=='J'||ch=='K'||ch=='L'){return '5';}else if(ch=='M'||ch=='N'||ch=='O'){return '6';}else if(ch=='P'||ch=='R'||ch=='S'){return '7';}else if(ch=='T'||ch=='U'||ch=='V'){return '8';}else if(ch=='W'||ch=='X'||ch=='Y'){return '9';}return ch;
}

问题总结:(1)第一个代码用的是Vector,结果超时,主要是Vector排序耗时很长。

(2)用数组,但是仍然超时,主要就是O(n^3)的时间复杂度的问题,所以对于对于查找可以选择用map,对于比较可以选择将字符串转变成用int类型。容易忽视的是当类型为int时会忽视前面是0的情况,所以需要保持格式。

个人心得:对于一个问题,一定要考虑复杂度问题,很可能没有考虑好就会超时,而且对于使用的STL一定要考虑其复杂度!同时一定要考虑到问题的各个方面!

转载于:https://www.cnblogs.com/Yvettey-me/p/4696973.html

487-3279 (poj1002)相关推荐

  1. D - Fliptile POJ - 3279(翻转问题)

    D - Fliptile POJ - 3279 题意: 给一个m*n的01矩阵,对某一块砖踩一脚,1->0 || 0->1, 求将整个举证全部变为0最少踩几次 典型的翻转问题,此类问题的特 ...

  2. POJ 3279(Fliptile)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定长宽的黑白棋棋盘摆满棋子,每次操作可以反转一个位置和其上下左右共五个位置的棋子的颜色,求要使用最少翻转次数将所有棋子反转为黑 ...

  3. leetcode 485,487,1004. Max Consecutive Ones I ,II, III(最大连续1的个数问题合集)

    485. Max Consecutive Ones https://leetcode.com/problems/max-consecutive-ones/ easy 题,思路不说了,直接上代码. cl ...

  4. mysql无法找到事件id100描述_解决“事件 ID ( 487 )的描述(在资源( Zend Optimizer )中)无法找到”...

    事件类型: 错误 事件来源: Zend Optimizer 事件种类: 无 事件 ID: 487 日期: 2006-8-18 事件: 0:17:36 用户: N/A 计算机: COMPUTER 描述: ...

  5. init_cheap: VirtualAlloc pointer is null, Win32 error 487

    用mingw编译程序时报错: 0 [main] us 0 init_cheap: VirtualAlloc pointer is null, Win32 error 487 AllocationBas ...

  6. poj 3279 poj 1753

    poj 3279: Description Farmer John knows that an intellectually satisfied cow is a happy cow who will ...

  7. POJ 3279 Fliptile

    传送门:http://poj.org/problem?id=3279 Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissi ...

  8. 解决“事件ID(487)的描述(在资源(Zend Optimizer)中)无法找到”问题

    IIS+PHP+Zend服务器配置好并运行一段时间后,你可能在事件日志中看到如下信息:(以Windows服务器而言)事件 ID ( 487 )的描述(在资源( Zend Optimizer )中)无法 ...

  9. pr cpu100%_PR插件proDAD4.0.487.1安装教程

    插件下载 [名称]:Pr插件-proDAD4.0.487.1 [大小]:20.8 MB [语言]:简体中文 [安装环境]:Win7/Win8/Win10 [支持版本]:Pr CC2015-Pr CC2 ...

  10. asterisk 对接 移动IMS 外呼接通时返487错误(已解决)

    症状: 1.呼入正常 2.外呼部分手机号正常 3.外呼部分号码时,外线一接通,IMS会返回487,然后就挂掉了 经查是maxptime 与移动IMS不匹配造成,移动要求是240,但是asterisk的 ...

最新文章

  1. linux shell合并文件命令paste
  2. 不用python编程,制作词云图
  3. Kafka剖析(一):Kafka背景及架构介绍
  4. sql优化的方法及思路_微生物发酵 技术优化思路 与方法
  5. 史上最简单MySQL教程详解(进阶篇)之索引及失效场合总结
  6. 8255工作方式2——双向选通输入输出(A口)
  7. TongWeb和Tomcat的区别
  8. Radius认证协议(六)报文属性
  9. 有软件测试台式电脑电源供电不足吗,电脑主机等电源供电不足的症状
  10. 报告显示,2019秋冬高端游南北极、欧洲最受欢迎,海岛热度不减
  11. 二维图形编辑系统c语言实现,实验四01二维图形的几何变换.doc-资源下载在线文库www.lddoc.cn...
  12. 腾讯云云开发CTA认证题库
  13. 华为云服务器不显示盘符,云服务器只有一个盘符可以
  14. 安卓实现音乐播放器(暂停,播放)
  15. PHP实现小程序微信支付V2获取prepay_id
  16. 统信UOS系统无法卸载软件怎么办
  17. android手写输入
  18. 捕捉RAISERROR异常
  19. 致象我这样的大龄青年
  20. python删除特定文件_python删除特定文件的方法 -电脑资料

热门文章

  1. 北航计算机学硕还是专硕,经验教训-2018二战考研北航计算机
  2. mysql sql参数化查询_mybatis的sql参数化查询
  3. python not in range1002无标题_新手常见Python运行时错误
  4. Jenkins系列一Linux环境安装Jenkins
  5. HTTP响应码及其含义
  6. Java网络编程之UDP
  7. 【颅内出血识别问题】数据分析与可视化
  8. PyTorch中的梯度微分机制
  9. Tensorflow实例,拟合二维数据
  10. python中将数组存储为二进制文件并读取