uva 10132 File Fragmentation
来源:互联网 发布:平安数据科技 模型组 编辑:程序博客网 时间:2024/05/16 12:19
这个题挺恶心,弄了不少时间,大概意思是有2n个文件碎片,他们都是从原来的一模一样的n个文件拆成两半形成的,要你根据这些碎片确定原来文件,一开始就应该能想到要把这些碎片长度从小到大排个序,然后我就天真的以为最短+最长的应该就是了,确实没错,但这里有个问题就是如果最短和最长的文件都有多个,那么问题就出来了,这里就必须得用枚举,来确定原文件碎片,不过这个题目数据有点水,只要把文件长度排序后,找到最长和最短文件的最后一个和第一个,长的和短的拼接也能过。。。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>using namespace std;int num,L;char s[600];struct frag{ char str[600]; int len;}f[300];bool cmp(frag a,frag b){ return a.len<b.len;}bool check(){ int count=0,vis[300]; char temp[1000]; memset(vis,0,sizeof(vis)); for(int i=0;i<num;i++){ if(!vis[i]){ bool flag=false; for(int j=num-1;j>i;j--)if(!vis[j]&&f[i].len+f[j].len==L) { strcpy(temp,f[i].str); strcat(temp,f[j].str); if(!strcmp(temp,s)) { flag=true; vis[i]=vis[j]=1; break; } strcpy(temp,f[j].str); strcat(temp,f[i].str); if(!strcmp(temp,s)) { flag=true; vis[i]=vis[j]=1; break; } } if(flag)count++; else break; } } if(count==num/2)return true; else return false;}int main(){ int t; scanf("%d",&t); getchar(); getchar(); while(t--){ num=0; while(1){ if(!gets(f[num].str))break; if(!strcmp(f[num].str,""))break; f[num].len=strlen(f[num].str); num++; } sort(f,f+num,cmp); bool ok=false; L=f[0].len+f[num-1].len;//长度肯定等于最长+最短子串 for(int i=0;!ok&&f[i].len==f[0].len;i++){//由于可能会有很对最长或最短子串,就得一个一个枚举一下 for(int j=num-1;!ok&&f[j].len==f[num-1].len;j--){ strcpy(s,f[i].str);//把两个子串接起来 strcat(s,f[j].str); if(check()){ ok=true; break; } strcpy(s,f[j].str); strcat(s,f[i].str); if(check()){ ok=true; break; } } } printf("%s\n",s); if(t)printf("\n"); } return 0;}
- UVa 10132 - File Fragmentation
- UVa 10132 - File Fragmentation
- UVa 10132 - File Fragmentation
- uva 10132 - File Fragmentation
- uva 10132 - File Fragmentation
- UVa 10132 - File Fragmentation
- UVa 10132 - File Fragmentation
- UVA 10132 File Fragmentation
- UVa:10132 File Fragmentation
- UVA 10132 - File Fragmentation
- uva 10132 File Fragmentation
- uva 10132 File Fragmentation
- uva 10132 File Fragmentation
- uva 10132 - File Fragmentation
- uva 10132 - File Fragmentation
- UVA - 10132 File Fragmentation
- uva 10132 File Fragmentation
- UVA 10132 File Fragmentation
- SSI整合小例子-增删改查
- Adobe AIR中使用Flex连接Sqlite数据库
- POJ 3254 & POJ 1185 (状态压缩DP)
- 游戏开发中的人工智能——基本路径寻找及航点应用
- linux下使用yum安装mysql
- uva 10132 File Fragmentation
- 让Android App启动更协调
- 工作线程AfxBeginThread的使用
- Ubuntu/Fedora高版本安装海思SDK的方法
- UVA 270 Lining Up (几何 判断共线点)
- read()函数简介
- SQlite---SQLite数据库增删改查操作
- abstract 抽象类 用法
- 6410之异步通知机制