分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

CCF201803 URL

发布时间:2023-09-06 02:33责任编辑:林大明关键词:暂无标签

题目一如既往的冗长~

这一题小菜鸡我一直没有过,后来是在网上模仿大佬思路写的。

仍然是信息的提取,但有坑!!具体的,代码注释上有:

#include <bits/stdc++.h>using namespace std;string Rules[100],Name[100];void GetInfo(vector<string> &v,string s)//去‘/‘取信息 { ???v.clear(); ???string temp; ???for(size_t i=1;i<s.size();i++) ???{ ???????if(s[i]==‘/‘){ ???????????v.push_back(temp); ???????????temp.clear(); ???????} ???????else{ ???????????temp+=s[i]; ???????} ????} ???if(temp.size()!=0){ ???????v.push_back(temp); ???}} string Check(string s){ ???for(size_t i=0;i<s.size();i++) ???{ ???????if(s[i]<‘0‘||s[i]>‘9‘){ ???????????return "<str>"; ???????} ???} ???return "<int>";}vector<string> Answer;//存答案 bool Judge(string s,string rules)//所有否定情况都举出,都不符,则真 { ???Answer.clear();//现将Answer 初始化 ????vector<string> ju1,ru2; ???int count=1; ?//辅助读取 <path> ????GetInfo(ju1,s); ???GetInfo(ru2,rules); ???if(ru2.size()>=1) ????if((ju1.size()>ru2.size()) ???????&&(ru2[ru2.size()-1]!="<path>")) { ???????return false; ???????????} ???if(ju1.size()<ru2.size()){//judge不可能小 ????????return false; ???} ???if(ru2.size()==0&&ju1.size()!=0) return false; ???/////////// ???if(ju1.size()>=ru2.size())//大于时,到rule的最后一项必然会有不同 ????{ ???????for(size_t i=0;i<ru2.size();i++)//从最初的一节开始遍历 ????????{ ???????????if(ju1[i]==ru2[i]){//类型 可能不止占一节 ????????????????count+=(ju1[i].size()+1); ???????????} ????????????//不等时 ????????????else if(Check(ju1[i])==ru2[i]) ???????????{ ???????????????Answer.push_back(ju1[i]); ???????????????count+=1+ju1[i].size(); ???????????} ???????????else if(ru2[i]=="<path>"){//非<path> ????????????????Answer.push_back(s.substr(count));//一直读到最后 ???????????}//还不能判断是否可以,因为还有末尾的‘/‘ ???????????else { ????????????????return false; ???????????????} ????????} ???}//提取信息时,去掉了‘/‘,所以判断时要注意末尾的‘/‘ ??很坑呐,因为末尾都可以是‘/‘ 。坑啊啊啊啊!! ???if(s[s.size()-1]==‘/‘&&rules[rules.size()-1]!=‘/‘){ ???????return false; ???} ???if(s[s.size()-1]!=‘/‘&&rules[rules.size()-1]==‘/‘){ ???????return false; ???} ???////////// ???return true; //终极真!!! } int Str_to_Num(string str)//转换为整型,去掉前导零 { ???int num=0; ???for(size_t i=0;i<str.size();i++) ???{ ???????num=num*10+(str[i]-‘0‘); ???} ???return num;}int main(){ ???int n=0,m=0; ???cin>>n>>m; ???int i=0; ???for(i=0;i<n;i++) ???{ ???????cin>>Rules[i]>>Name[i]; ???} ????while(m--) ???{ ???????string s; ???????cin>>s; ???????bool flag=false; ???????for(i=0;i<n;i++) ???????{ ???????????if(Judge(s,Rules[i])){ ???????????????flag=true; ???????????????break; ???????????} ???????} ???????if(flag==false){ ???????????cout<<"404"<<endl; ???????} ???????else{//true ???????????cout<<Name[i]; ???????????for(size_t j=0;j<Answer.size();j++) ???????????{ ???????????????if(Check(Answer[j])=="<int>") ???????????????{ ???????????????????cout<<‘ ‘; ???????????????????cout<<Str_to_Num(Answer[j])<<‘ ‘; ???????????????} ???????????????else{ ???????????????????cout<<‘ ‘; ????????????????????cout<<Answer[j]; ???????????????} ???????????} ???????????cout<<endl; ???????} ???} ???return 0;} 

CCF201803 URL

原文地址:https://www.cnblogs.com/GorgeousBankarian/p/10384548.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved