2010年11月5日金曜日

TopCoder 練習

InternetSecurity(SRM 480 Div1 Easy)

■問題
幾つかのサイトのURLとそのサイトに含まれるキーワードと,危険なサイトであることを表すキーワード群が与えられる.どのサイトが危険であるかを判定せよ.

■解法
危険キーワードをリストに取っておく.
n個のサイトについて以下を調べる.
あるサイトが危険キーワードを含む場合,そのサイトを「危険である」とし,そのサイトが含むキーワードを危険キーワードリストに追加.
「危険である」サイトが見つからなくなるまでループ.

import java.lang.*;
import java.util.*;

public class InternetSecurity{
public String[] determineWebsite(String[] address, String[] keyword, String[] d, int threshold){
int n=address.length;
LinkedList<String> dangerous=new LinkedList<String>();
boolean[] flag=new boolean[n];
for(String s:d){
dangerous.add(s);
}
for(;;){
boolean f=false;
for(int i=0;i<n;i++){
if(flag[i]){
continue;
}
int c=0;
for(String s:keyword[i].split(" ")){
if(dangerous.contains(s)){
c++;
}
}
if(c>=threshold){
for(String s:keyword[i].split(" ")){
dangerous.add(s);
}
flag[i]=f=true;
}
}
if(!f){
break;
}
}
LinkedList<String> list=new LinkedList<String>();
for(int i=0;i<n;i++){
if(flag[i]){
list.addLast(address[i]);
}
}

return list.toArray(new String[0]);
}
}

0 件のコメント: