uva10132 - File Fragmentation(文件碎片)
来源:互联网 发布:用友初始化数据库 编辑:程序博客网 时间:2024/06/06 09:37
个人觉得这个题的输入模式不好,我开始的时候就没看懂,什么又是end of file又是case 的。压根就没搞懂怎么样子结束。
看了人家的读取语句,我照着写了下来。
思路: 就是按照字符串长度排序, 用最短的开始找与它长度可以满足lenth的字符串,然后判断即可。
我的判断程序可能写的耗时了,程序跑了12ms。我看一个大牛的代码经过不断优化最后跑了4ms。
其实这个题的数组很规范,所以我们可以小偷懒一下,没必要完全回复,完全验证。
我的代码:
#include <cstdio>#include <cstring>#include <cstdlib>char st[200][300], aim[300];int c, len;int comp(const void *a,const void *b){ char *c = (char*)a, *d = (char*)b; return strlen(c)-strlen(d);}int is_ok(char *A){ int L, yes; for(int i = 0; i < c; i++) { yes = 1; L = strlen(st[i]); for(int j = 0; j < L; j++) if(st[i][j]!=A[j]) { yes = 0; break;} if(yes) continue; else yes = 1; for(int j = 0; j < L; j++) if(st[i][L-1-j]!=A[len-1-j]) {yes = 0; break;} if(yes) continue; else return 0; } return 1;}int main (){ int t; scanf("%d",&t);getchar(); getchar(); while(t--) { c = 0; while(gets(st[c])&&st[c][0]!=0) c++; qsort(st,c,sizeof(st[0]),comp); len = strlen(st[0])+strlen(st[c-1]); for(int i = c-1;i >= 0; i--) if(strlen(st[i])==len-strlen(st[0])) { strcpy(aim,st[0]); strcat(aim,st[i]); if(is_ok(aim)) {printf("%s\n",aim); break;} strcpy(aim,st[i]); strcat(aim,st[0]); if(is_ok(aim)) {printf("%s\n",aim); break;} } if(t) printf("\n"); } return 0;}再贴一下4ms的代码:
#include <stdio.h>#include <string.h>#include <stdlib.h>char s[160][260],p[260],q[260];int cmp(const void *a,const void *b){return strlen((char *)a)-strlen((char *)b);}int judge(int n,int len){int i,j,f;j=1;f=0;for(i=1;i<n;i++){if(strlen(s[i])!=len-strlen(s[j])) continue;strcpy(q,s[j]);strcpy(q+strlen(s[j]),s[i]);if(strcmp(p,q)==0) return 1;strcpy(q,s[i]);strcpy(q+strlen(s[i]),s[j]);if(strcmp(p,q)==0) return 1;}return 0;}int main(){int T,cnt,i,min,max;scanf("%d",&T);gets(s[0]); getchar();while(T--){cnt=0;while(gets(s[cnt])&& s[cnt][0]!=0) cnt++;qsort(s,cnt,sizeof(s[0]),cmp);min=strlen(s[0]);max=strlen(s[cnt-1]);for(i=cnt-1;i>=0 && strlen(s[i])==max;i--){strcpy(p,s[0]);strcpy(p+strlen(s[0]),s[i]);if(judge(cnt,min+max)) break;strcpy(p,s[i]);strcpy(p+strlen(s[i]),s[0]);if(judge(cnt,min+max)) break;}printf("%s\n",p);if(T) printf("\n");}return 0;}
- uva10132 - File Fragmentation(文件碎片)
- [暴力]uva10132 File Fragmentation
- uva10132-File Fragmentation
- uva10132 - File Fragmentation
- 文件碎片-uva10132
- UVa Problem 10132 File Fragmentation (文件碎片)
- File Fragmentation
- UVA File Fragmentation(文件复原)
- 内存碎片 Memory Fragmentation
- 【fragmentation】ORACLE中碎片小结
- 内存碎片(Memory Fragmentation)
- UVa Problem 10132 File Fragmentation (文件还原) 排列组合+暴力
- UVa10132
- uva10132
- uva10132
- UVa 10132 - File Fragmentation
- File Fragmentation-ACM
- 10132 - File Fragmentation
- Oracle 中的JOIN
- [翻译][php扩展开发和嵌入式]第9章-资源数据类型
- 不用加减乘除运算符计算两数之和及a=b*3
- 通达信公式函数
- 第3堂作业
- uva10132 - File Fragmentation(文件碎片)
- Percona Xtrabackup MySQL 全备
- 恭喜!麻省理工两密码学教授获2012图灵奖
- oracle知识点总结
- MySQLl虚拟表
- Andorid添加CCEditBox控件编译报错
- Eclipse快捷键大全
- 序列元素和、正则表达式匹配、BFS最短路径问题
- iOS 模仿系统的抖动动画