和这个题目杠上了,求几个测试点
查看原帖
和这个题目杠上了,求几个测试点
1047129
xieyang1234楼主2023/11/29 22:14
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.*;

public class Main {
    static class Input{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        StreamTokenizer in=new StreamTokenizer(br);
        public String nextStr() throws IOException {
            return br.readLine();
        }
        public int nextInt() throws IOException{
            in.nextToken();
            return (int) in.nval;
        }
    }
    static Map<String,Integer> map=new HashMap<>();
    static List<String> list=new ArrayList<>();
    static int[] nums;
    static int val;
    public static void main(String[] args) throws IOException{
        Input sc=new Input();
        int n=sc.nextInt();
        nums=new int[n];
        for (int i = 0; i < n; i++) {
            String t=sc.nextStr();
            map.put(t,i);
            nums[i]--;
        }
        int m=sc.nextInt();
        for (int i = 0; i < m; i++) {
            list.add(sc.nextStr());
            if (map.containsKey(list.get(i))&&nums[map.get(list.get(i))]++<0) val++;
        }
        System.out.println(val);
        int t=fen(val,m);
        System.out.println(t);
    }
    public static int fen(int l,int r){
        int ans=0;
        while (l<=r){
            int key=(l+r)>>1;

            if (qs(key)){
                r=key-1;
                ans=key;
            }
            else {
                l=key+1;
            }
        }
        return ans;
    }
    public static boolean qs(int key){
        Queue<String> queue=new LinkedList<>();
        int[] cost=new int[map.size()];
        int val1=0;
        for (int r=0; r < list.size(); r++) {
            queue.add(list.get(r));
            if (map.containsKey(list.get(r))&&cost[map.get(list.get(r))]++<1) val1++;
            if (queue.size()>key) {
                String t=queue.poll();
                if (map.containsKey(t)){
                    if (cost[map.get(t)]--<2) val1--;
                }
            }
            if (val1==val) return true;
        }
        return false;
    }
}
我的思路是求得在文章中最多出现了多少次,然后在这个值和文章长度里面二分,但是全wa了,案列全过,自己案例也过了
2023/11/29 22:14
加载中...