第1题:IP过滤,采用正则表达式,全A
package bishi.sougou;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int M=sc.nextInt();
ArrayList<String> rule=new ArrayList<>();
//读取规则
for (int i = 0; i <N ; i++) {
String str=sc.next();
if(str.charAt(0)=='*'){//*号开头需要处理下
StringBuilder sb=new StringBuilder("\\S");
sb.append(str);
rule.add(sb.toString());
}else{
rule.add(str);
}
}
int[] res=new int[M];
for (int i = 0; i <M ; i++) {
String str=sc.next();
for (int j = 0; j <rule.size() ; j++) {//判断是否符合其中一条规则
Pattern pattern=Pattern.compile(rule.get(j));
Matcher matcher=pattern.matcher(str);
if(matcher.matches()){
res[i]=1;
break;
}
}
}
//输出
for (int i = 0; i <M ; i++) {
if(i==0){
System.out.print(res[i]);;
}else{
System.out.print(" "+res[i]);;
}
}
}
}
第2题:密码器,直接求解只能过30%,应该是用树状数组做,但我不会。
package bishi.sougou;
import java.util.Scanner;
public class Main2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int M=sc.nextInt();
int[] arr=new int[N];
for (int i = 1; i <=M ; i++) {
int L=sc.nextInt();
int R=sc.nextInt();
operation(arr,L,R,i);
}
long sum=0;
for (int i = 0; i <N ; i++) {
sum=sum+i*arr[i];
}
long res=sum%100000009;
System.out.println(res);
}
public static void operation(int[] arr,int L,int R,int count){
if(L>R){
return;
}else{
for (int i = L; i <=R ; i++) {
arr[i]=count;
}
}
}
}
搜狗笔试题解析
本文解析了搜狗笔试中的两道题目,第一题为IP过滤,通过正则表达式进行匹配,第二题为密码器问题,初步解决方案为直接求解,但更优解可能涉及树状数组的应用。
141

被折叠的 条评论
为什么被折叠?



