/ Vijos / 题库 /1622/文件查找(HOI)
描述
WINDOWS是一个很庞大的操作系统(当然啦,看占的硬盘空间就知道了),比如说,它的文件查找系统。现在,请你用PASCAL或者C或者C++模拟一下这个操作过程。为了降低难度,所有的文件夹名和文件名都是小写和数字,且不考虑盘符,而且也不会有WINDOWS禁止出现在文件名中的字符。同时,为了增加难度,每个文件夹内可能有重名的文件(夹)。当然,不能让用户等太久,你的程序要在1秒内找到用户要的文件。
格式
输入格式
输入文件filesearch.in包含多行,第一行是用户查找的文件名,该文件名不会含WINDOWS禁止出现在文件名中的字符,一定带符号”.”;第二行开始输入一个或多个文件夹的相关信息。文件夹的相关信息用以下格式输入:
文件夹名(中间无空格,且无符号“.”(小数点))+ 一个空格+文件夹内的文件数(包括文件夹),如果文件夹内还有子文件夹,换行后先输入该子文件夹内容再输入父文件夹内的其他文件夹或文件。每个文件名都带符号“.”。具体请看样例。
输出格式
输出所查找文件的路径,一定在至少一个文件夹的目录下。以WINDOWS地址的表示方法表示(“”),如果有多个文件,按输入时的顺序输出。每输出一个文件的路径换一行。
样例1
样例输入1
hoi.pas
hoi 2
hoi 0
hoi.pas
hoi.pas
样例输出1
hoihoi.pas
hoi.pas
样例2
样例输入2
chroi.pas
chroi 2
hoi 1
chroi.pas
chroi 1
hoi.pas
样例输出2
chroihoichroi.pas
限制
各个测试点1s
提示
【数据范围】
对于50%的数据,输入文件的行数小于100。
对于100%的数据,输入文件的行数小于3000,且每行均少于25个字符。
来源
HOI 2009
递归:
string find函数:
find函数的返回值是整数,假如字符串存在包含关系,其返回值必定不等于npos;但如果字符串不存在包含关系,那么返回值就一定是npos。
网络来源:https://blog.csdn.net/cheer_zhang/article/details/77455704
#include<iostream> #include<queue> #include<cstdio> #include<cstring> #include<algorithm> #include<stack> #include<vector> #define N 2000 using namespace std; void in(int &x){ register char c=getchar();x=0;int f=1; while(!isdigit(c)){if(c=='-') f=-1;c=getchar();} while(isdigit(c)){x=x*10+c-'0';c=getchar();} x*=f; } string an,s,ans[N]; string S[N]; bool flg=0; void dg(int cnt){ s=""; while(cin>>s) break; if(s=="") {flg=1;return;} S[cnt]=s; int l=s.length(); if(s.find('.')!=string::npos){ if(s==an){ for(int i=1;i<=cnt-1;i++) cout<<S[i]<<"\"; cout<<an<<" "; } } else { int p; cin>>p; for(int i=1;i<=p;i++) dg(cnt+1); }return; } int main() { cin>>an; while(1){ dg(1); if(flg) break; }return 0; }