3 条题解

  • 0
    @ 2026-4-6 18:00:33

    import java.util.ArrayList; import java.util.Scanner; public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //思路
        int n=sc.nextInt();
        int ans=0;
        int[]cnt=new int[200001];//计数
        boolean[]vis=new boolean[200001];//判断是否读入,去重
        ArrayList<Integer>list=new ArrayList<>();//存数     
        
        for(int i=0;i<n;i++) {
        	int m=sc.nextInt();
        	cnt[m]++;
    

    //
    if(!list.contains(m))list.add(m);太慢->vis

          if(!vis[m]) {
        		list.add(m);//没读入的话
        		vis[m]=true;
        	}
        }
        
        for(int i=0;i<list.size();i++) {//一个数跟每个数配对      
    

    // for(int j=0;j<list.size();j++) { // int a=list.get(i),b=list.get(j); // if(cnt[a]>=b&&cnt[b]>=a)ans++; // }超时

          int a=list.get(i);//先枚举a
        	for(int b=1;b<=cnt[a];b++) {//再枚举<=cnt[a]的b
        		if(vis[b]&&cnt[b]>=a)ans++;//看是否有数,和满足另一个条件
        	}
        }
        System.out.println(ans);
    }
    

    }

    信息

    ID
    598
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    167
    已通过
    43
    上传者