ZOJ-2585
来源:互联网 发布:淘宝泰隆达是正 编辑:程序博客网 时间:2024/06/18 12:18
求回文距离,算比较水吧,第一次提交AC了60ms,看看别人的时间好少,发现算法可以改进,完全就不用排序,直接开个数组计数就行了,改进后就只用10ms了,附上改进前后代码
改进前:
#include<stdio.h>#include<string.h>#include<stdlib.h>static int cmp(const void *p1, const void *p2){char *c1 = (char *) p1;char *c2 = (char *) p2;return *c1 - *c2;}int main(){int k, i, j, n;char s[100], t[100];scanf("%d", &n);getchar();for (k = 1; k <= n; k++){gets(s);gets(t);int total = 0, a = strlen(s), b = strlen(t);qsort(s, a, sizeof(char), cmp);qsort(t, b, sizeof(char), cmp);i = j = 0;while (i < a && j < b){if (s[i] < t[j]){i++;total++;}else if (s[i] > t[j]){j++;total++;}else{i++;j++;}}total += a - i + b - j;printf("Case #%d: %d\n", k, total);}return 0;}
改进后:
#include<stdio.h>#include<string.h>#include<stdlib.h>int main(){int k, i, j, n, a[26], b[26];char s[100];scanf("%d", &n);getchar();for (k = 1; k <= n; k++){int total = 0;memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));gets(s);for (i = 0; s[i] != '\0'; i++)a[s[i] - 'a']++;gets(s);for (i = 0; s[i] != '\0'; i++)b[s[i] - 'a']++;for (i = 0; i < 26; i++)total += abs(a[i] - b[i]);printf("Case #%d: %d\n", k, total);}return 0;}
0 0
- ZOJ-2585
- poj 2585& zoj 2193
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- 集合加法
- 第七周 项目1--深复制体验
- sax解析案例(javabean封装xml文档数据)
- Android开发学习笔记--基础知识(一)
- CheckBox的使用(三):获取是否选中
- ZOJ-2585
- BAT三巨头们的理想生意:要的就是高毛利
- 码农天气--码农自己的天气APP(一)
- Mongo数据库安装成Windows服务(转)
- MIPS流水线以及分支延迟和加载延迟概念(一)
- ACM-简单题之不容易系列之一——hdu1465
- hadoop0.20.2:The temporary job-output directory doesn't exist!
- Hadoop生态圈常用命令
- 第七周项目4-友元类