uva 10132 - File Fragmentation

简介: 点击打开链接uva 10132 题目意思:   有一个人有n个文件,每个文件都是相同的,现在这n个文件的每一个文件都被分成了两部分用字符序列表示,要我们找到原来文件的字符序列。

点击打开链接uva 10132


题目意思:   有一个人有n个文件,每个文件都是相同的,现在这n个文件的每一个文件都被分成了两部分用字符序列表示,要我们找到原来文件的字符序列。


解题思路:    1:每一个文件都是分裂成两部分,每一种文件都是相同的,那么只要找到最小的长度和最大的长度,那么加起来就是文件的长度记为L。
                     2:知道了文件的长度,那么如果我们从第一个子串假设为S1开始,让它分别和后面的字串相匹配,匹配处理有两种可能AB和BA,如果长度为L,那么我们就把这两种情况全部放进map,那么我们可以知道S1基本上都可以和其中的一种匹配成正确的序列,那么只要枚举一遍这个所有子串,那么我们知道在map里面最多的序列就是正确的序列,因为基本上每一次都可以匹配出一个正确的序列
                     3:最后输出map中second最大的first即可
                     4:map使用简单介绍:如果我们要把s插入map,首先我们先判断s是否在map里面,用find函数查找,如果存在直接m[s]++,如果不存在那么我们就令m[s] = 1表示插入
                     5:输入的应用,因为是要读到EOF,所以用gets读入再转化为string,当ch[0] == '\0'时候break


代码:

#include <algorithm> 
#include <iostream> 
#include <cstdlib> 
#include <cstring> 
#include <cstdio>  
#include <cctype>  
#include <cctype>  
#include <cmath>  
#include <stack>  
#include <list>  
#include <map>
using namespace std;  
#define MAXN 10010

int n , len;
string str[MAXN];
map<string , int>m;

void solve(){
    int i , j , l , max;
    int min_len , max_len;
    string s , tmp_str[MAXN] , ans;
    min_len = MAXN ; max_len = 0;
    //找最小长度和最大长度
    for(i = 0 ; i < len ; i++){
        if(str[i].size() < min_len)
            min_len = str[i].size();
        if(str[i].size() > max_len)
            max_len = str[i].size();
    }
    l = min_len+max_len;//文件长度
    m.clear();
    
    map<string , int>::iterator it;//迭代器
    for(i = 0 ; i < len ; i++){
       for(j = i+1 ; j < len ; j++){    
           s = str[i]+str[j];  
           if(s.size() > l)//注意一下这个地方,如果不加会RE,我也搞不懂
               continue;
           if(s.size() == l){
               it = m.find(s);
               if(it != m.end()) m[s]++;
               else  m[s] = 1;
           }
           s = str[j]+str[i];
           if(s.size() == l){
               it = m.find(s);
               if(it != m.end()) m[s]++;
               else  m[s] = 1;
           }
       }
    }
    //找最大值
    max = 0;
    for(it = m.begin() ; it != m.end() ; it++){
        if(max < it->second){
            max = it->second;
            ans = it->first;      
        }
    }
    cout<<ans<<endl;//输出
}

int main(){
   //freopen("input.txt" , "r" , stdin);
    char ch[500];
    scanf("%d%*c%*c" , &n);
    while(n--){
        len = 0;
        while(gets(ch)){
            if(!ch[0]) break;
            str[len] = "";
            for(int j = 0 ; j < strlen(ch) ; j++)
                str[len] += ch[j];
            len++;
        }
        solve();
        if(n)  printf("\n");
    }
    return 0;  
} 


目录
相关文章
|
监控 安全 网络安全
|
6月前
|
人工智能 JSON 安全
全民AI时代,大模型客户端和服务端的实时通信到底用什么协议?
本文将分享 SSE 和 WebSocket 这两个AI大模型应用的标配网络通信协议,一起重新认识下这两位新时代里的老朋友。
476 0
|
9月前
|
机器学习/深度学习 人工智能 算法
人工智能与机器人的结合:智能化世界的未来
人工智能与机器人的结合:智能化世界的未来
1170 32
|
Cloud Native 关系型数据库 MySQL
云原生数据仓库产品使用合集之ADB MySQL湖仓版和 StarRocks 的使用场景区别,或者 ADB 对比 StarRocks 的优劣势
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
负载均衡 网络架构 CDN
阿里云服务器网络不稳定,可能有以下一些原因
阿里云服务器网络不稳定,可能有以下一些原因
2283 1
|
SQL 存储 分布式计算
万字长文|Hadoop入门笔记(附资料)
大数据迅速发展,但是Hadoop的基础地位一直没有改变。理解并掌握Hadoop相关知识对于之后的相关组件学习有着地基的作用。本文整理了Hadoop基础理论知识与常用组件介绍,虽然有一些组件已经不太常用。但是理解第一批组件的相关知识对于以后的学习很有帮助,未来的很多组件也借鉴了之前的设计理念。
396 0
万字长文|Hadoop入门笔记(附资料)
|
人工智能 自然语言处理 算法
业界总结 | 如何改进双塔模型,才能更好的提升你的算法效果?(一)
业界总结 | 如何改进双塔模型,才能更好的提升你的算法效果?(一)
892 0
业界总结 | 如何改进双塔模型,才能更好的提升你的算法效果?(一)
|
Java 数据库连接 Maven
Springboot 系列(十五)如何编写自己的 Springboot starter
Springboot 系列(十五)如何编写自己的 Springboot starter
649 0
Springboot 系列(十五)如何编写自己的 Springboot starter
|
图形学 Android开发
Android/Unity混合开发屏幕旋转问题以及8.0透明页面兼容
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
805 0
|
人工智能 双11 决策智能
阿里ACP认证含金量比较高,建议考取
目前,公有云平台已经成为客户低成本获取人工智能服务的最重要渠道。云天然解决了企业数据和技术的统一,并构成了企业获取人工智能能力的最重要路径。在商业领域,经过云服务商自身业务验证的人工智能技术备受企业决策者青睐。
2722 0
阿里ACP认证含金量比较高,建议考取