首页 > 其他分享 >【每日一题】Problem 174B. File List

【每日一题】Problem 174B. File List

时间:2023-06-14 20:13:11浏览次数:53  
标签:std ok string List pos len npos File Problem

原题

解决思路

纯模拟,比较文件名长度是否合规,文件格式+下一个文件名长度是否合规

误区
  1. 文件名的长度要和文件格式+下一个文件名的长度分开判断
    • 更新左端点和每次迭代开始先判断的方式解决该问题
  2. 最后一个 '.' 后的文件格式需要特殊处理
    • 在循环结束后与 '.' 不存在的情况共同处理
  3. vector 中的元素类型如果是 string,那么复制字符串的过程相当耗时
    • vector 中保留文件名的右端点,打印时以\([l, r]\)为范围循环打印每个字符
  4. std::endl 不仅有换行的功能,同时也会刷新 io 流,该操作也十分耗时

    Inserts a newline character into the output sequence os and flushes it as if by calling os.put(os.widen('\n')) followed by os.flush().

    • 使用 std::cout << "\n" 替换 std::endl
#include <bits/stdc++.h>
#define ull unsigned long long
int main() {
    std::ios::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);
    std::string s; std::cin >> s;
    ull l, r, len, pos, npos;
    l = r = 0, pos = npos = std::string::npos;
    std::vector<ull> fs;
    bool ok = true;

    npos = s.find('.', pos + 1);
    while (npos != std::string::npos) {
        if (npos == l || npos - l > 8) {
            // '.' 为下一个文件名的开头或文件头太长,格式错误
            ok = false;
            break;
        }

        // 计算文件格式与下一个文件头
        pos = npos; // 更新 '.' 坐标
        npos = s.find('.', pos + 1);
        if (npos != std::string::npos) {
            len = npos - pos - 1;
            if (len > 11 || len < 2) {
                ok = false;
                break;
            }

            if (len > 8) r = pos + len - 8;
            else r = pos + 1;
            fs.push_back(r);
            l = r + 1;
        }
    }

    // 判断最后一个 '.' 后的字符串是否符合要求
    if (pos == std::string::npos) {
        // 文件名中不存在 '.'
        ok = false;
    } else {
        len = s.size() - pos - 1;
        if (len <= 0 || len > 3) {
            // 最后一个 '.' 后没有字符或太多,格式错误
            ok = false;
        } else {
            fs.push_back(s.size() - 1);
        }
    }

    if (!ok) std::cout << "NO\n";
    else {
        std::cout << "YES\n";
        int i = 0;
        for (auto p : fs) {
            while (i <= p) std::cout << s[i++];
            std::cout << "\n";
        }
    }
    return 0;
}

总结

模拟的时候思路还是不够清晰,导致常常是面向测试结果编程

标签:std,ok,string,List,pos,len,npos,File,Problem
From: https://www.cnblogs.com/HelloEricy/p/17481240.html

相关文章

  • 浅谈MultipartFile中transferTo方法的坑 服务器上面使用相对路径 file.transferTo(fil
    浅谈MultipartFile中transferTo方法的坑服务器上面使用相对路径file.transferTo(filePath.getAbsoluteFile())而不是file.transferTo(filePath.getPath())绝对路径,实际生产配置服务器里面的一个文件夹。比如配置服务器文件夹前缀为/downfile/excelfile原文链接:https://ww......
  • IO_File_获取的方法
    importjava.io.File;importjava.util.Date;/*获取功能*StringgetAbsolutePath()返回此抽象路径名的绝对路径名字符串。(绝对路径文件在系统磁盘上的路径,从盘符开始,一直到文件夹的名称)*StringgetPath()将此抽象路径名转换为路径名字符串。(相对路径:相对于当前的项目)*Strin......
  • hfile通过bulkload拷贝到hbase方式---TODO待整理
      参考链接: http://www.ithao123.cn/content-101658.html hbase之bulkload的主要类LoadIncrementalHFiles  http://www.thinksaas.cn/group/topic/233674/ bulkload执行mv和cp的区别 使用LoadIncrementalHFiles装载HFILE到HBASE的一点心得  : 数据入HBASE一般有......
  • IO_File的判断功能
    importjava.io.File;importjava.io.IOException;/**booleanisDirectory()测试此抽象路径名表示的文件是否为目录。*booleanisFile()测试此抽象路径名表示的文件是否为普通文件。*booleanexists()测试此抽象路径名表示的文件或目录是否存在。*booleancanRead()测试应......
  • ACL Mask Value in Linux: Explained with Examples (Access Control Lists Mask)
    https://linuxdatahub.com/masks-in-acl-linux-explained-with-examples-access-control-lists-mask/https://linuxdatahub.com/access-control-lists-acl-in-linux-explained/https://www.liquidweb.com/kb/what-is-umask-and-how-to-use-it-effectively/chmod770bbs......
  • IO_File
    Test03delete方法importjava.io.File;importjava.io.IOException;/*booleandelete()删除由此抽象路径名表示的文件或目录。*/publicclassFile_Test03{publicstaticvoidmain(String[]args)throwsIOException{//在此项目下创建2个文件Filefile......
  • 低代码工具:jvs-list(列表引擎)2.1.7功能清单及新增功能介绍
    在低代码开发平台中,列表页是一个用于显示数据列表的页面。它通常用于展示数据库中的多条记录,并提供搜索、排序和筛选等功能,以方便用户对数据进行查找和浏览。jvs-list是jvs快速开发平台的列表页的配置引擎,它和普通的crud具备更好的交互操作性,主要特点如下:支持动态模型创建,列表引擎......
  • Network File System 网络文件系统(centos 6)
    预备知识:1 什么是程序、进程、线程?程序:安装的软件就是程序进程:运行的程序---就是进程线程:运行的程序同时完成多个任务2 NFS三个主要组件?Rpc.nfsd  :它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器;(由nfs进程实现)Rpc.mount:主要功能是管理NFS......
  • unbounded knapsack problem
    DescriptionUnboundedKnapsackProblemThereare$N$kindsofitemsandaknapsackwiththecapacityof$V$,eachitemhasunlimitedpiecesavailable.Thevolumeofthe$i$-thitemis$v_i$,andvalueis$w_i$.Pleasesolvewhichitemscanbeputintothe......
  • 5、题目:Training in Creative Problem Solving: Effects on Ideation and Problem Fin
    期刊信息(1)作者:GeorgeB.Graen,StephenG.Graen(2)期刊:OrganizationalBehaviorandHumanPerformance(3)DOI:10.1016/0030-5073(82)90233-1(4)ISSN:0030-5073   研究背景创造力训练作为工业培训的一个子集,普遍面临着工业培训研究的许多问题,也面临着一些独特的问题。......