一、题目
问题描述
试题编号: | 201809-3 |
试题名称: | 元素选择器 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | |
二、思路
待更新
三、代码
只有70分
import java.util.*;
public class Main{
static class node{
int isId=0;
int sub;
String p;
String id=null;
node(int a,int b,String p,String id){
isId=a;
sub=b;
this.p=p;
this.id=id;
}
}
static node[] doc;
static String[] ans;
static ArrayList<Integer>[] list;
static int docnum;
public static void main(String[] args){
Scanner in=new Scanner(System.in);
docnum=in.nextInt();
int ansnum=in.nextInt();
String[] str=new String[docnum];
in.nextLine();
doc=new node[docnum];
ans=new String[ansnum];
list=new ArrayList[ansnum];
for(int i=0;i<docnum;i++){
str[i]=in.nextLine();
}
for(int i=0;i<ansnum;i++){
ans[i]=in.nextLine();
}
for(int i=0;i<ansnum;i++)
list[i]=new ArrayList();
solve(str);
result(ansnum,docnum);
for(int i=0;i<ansnum;i++){
if(list[i].size()==0)
System.out.println(0);
else{
System.out.print(list[i].size());
for(int k=0;k<list[i].size();k++)
System.out.print(" "+list[i].get(k));
System.out.println();
}
}
}
static void result(int ansnum,int docnum){
for(int i=0;i<ansnum;i++){
String[] split=ans[i].split("\\s+");
if(split.length==1){
if(split[0].charAt(0)=='#'){
for(int k=0;k<docnum;k++){
if(ans[i].equals(doc[k].id))
list[i].add(k+1);
}
}else{
String s=ans[i].toLowerCase();
for(int k=0;k<docnum;k++){
if(s.equals(doc[k].p))
list[i].add(k+1);
}
}
}else{
if(split[0].charAt(0)=='#'){
for(int j=0;j<docnum;j++){
if(doc[j].id.equals(split[0])){
int loc=doc[j].sub;
int flag=1;
for(int k=j+1;k<docnum;k++){
String s1=split[flag].toLowerCase();
if(doc[k].id.equals(s1)&&(doc[k].sub>loc)){
flag++;
loc=doc[k].sub;
}
if(flag==split.length){
list[i].add(k+1);
break;
}
}
}
}
}
else{
for(int j=0;j<docnum;j++){
if(doc[j].p.equals(split[0])){
int loc=doc[j].sub;
int flag=1;
for(int k=j+1;k<docnum;k++){
String s1=split[flag].toLowerCase();
if(doc[k].p.equals(s1)&&(doc[k].sub>loc)){
flag++;
loc=doc[k].sub;
}
if(flag==split.length){
list[i].add(k+1);
break;
}
}
}
}
}
}
}
}
static void solve(String[] str){
int len=str.length;
String tree=str[0].toLowerCase();
doc[0]=new node(0,0,tree,null);
for(int i=1;i<len;i++){
StringBuffer buf=new StringBuffer();
int temp=0;
char ch='.';
int a=0,b=0;
String s=null;
String id=null;
for(temp=0;;temp+=2){
ch=str[i].charAt(temp);
if(ch!='.'){
b=temp/2;
break;
}
}
for(;;temp++){
if(temp==str[i].length())
break;
ch=str[i].charAt(temp);
if(ch==' '){
break;
}
buf.append(ch);
}
s=buf.toString().toLowerCase();
if(temp<str[i].length()){
String[] split=str[i].split("\\s+");
id=split[1];
a=1;
}
doc[i]=new node(a,b,s,id);
}
}
}