PKU 2022-Syntax Included
問題概要
入力が問題に与えられたHTMLの形式を満しているか調べる問題
解法
実装するだけ.
若干嵌りやすい問題かも
実装(Java)
import java.util.*; import java.math.*; import java.io.*; import java.util.regex.*; import static java.lang.Math.*; import static java.util.Arrays.*; import static java.lang.System.*; public class Main { Scanner cin; void run(){ cin=new Scanner(System.in); int T=Integer.parseInt(cin.nextLine()); for(int tt=0;tt<T;tt++){ String in=cin.nextLine(); Boolean ok=true; if(!in.startsWith("<HTML><BODY>"))ok=false; if(!in.endsWith("</BODY></HTML>"))ok=false; if(ok){ in=in.substring(12,in.length()-(12+2)); //<>の対応関係を調べる int back=-1; for(int i=0;i<in.length();i++){ if(in.charAt(i)=='<'){ if(back==-1) back=1; else ok=false; } if(in.charAt(i)=='>'){ if(back==1) back=-1; else ok=false; } } } if(ok){ //タグに分割 List<String> tags=new ArrayList<String>(); Stack<String> stack=new Stack<String>(); String now=""; for(int i=0;i<in.length();i++){ if(in.charAt(i)=='<'){ for(int j=i+1;j<in.length();j++){ if(in.charAt(j)=='>'){ //printf("%s\n",in.substring(i+1,j)); tags.add(in.substring(i+1,j)); break; } } } } for(String tmp:tags){ if(tmp.startsWith("/")){ tmp=tmp.substring(1); if(tmp.equals("B")==false&&tmp.equals("I")==false&&tmp.equals("A")==false){ ok=false; break; } if(stack.empty()||stack.lastElement().equals(tmp)==false){ ok=false; break; } stack.pop(); }else{ if(tmp.equals("B")||tmp.equals("I")){ stack.add(tmp); }else if(tmp.startsWith("A HREF=")){ stack.add("A"); tmp=tmp.substring(7); //printf("%s\n",tmp); if(tmp.startsWith("http://")&&tmp.endsWith(".com")){ if(tmp.contains(" ")){ ok=false; break; } }else{ ok=false; break; } }else{ ok=false; break; } } } if(stack.empty()){ }else{ ok=false; } } printf("%sSyntax Included\n",ok?"":"No "); } } void printf(String format,Object... args){ System.out.printf(format, args); } public static void main(String[] args) { new Main().run(); } }