Japan Registry Services (JPRS) Programming Contest 2024 (AtCoder Beginner Contest 339)

F - Product Equality

题目大意

  • 给定N个整数A1,A2,…,AN。 找到满足以下条件的整数三元组(i,j,k)的数量:

    1≤i,j,k≤N Ai×Aj=Ak 1 ≤ N ≤ 1000 1 ≤ Ai < 10^1000

解题思路

  • A_i很大,不能直接进行乘法计算

  • 考虑哈希,取模变小

  • 为保证结果的正确性,进行三哈希判断,都满足时为正确

  • 注意i,j,k可以相等

    import java.io.*;
    import java.math.BigInteger;
    import java.util.Arrays;
    import java.util.BitSet;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.PriorityQueue;
    import java.util.Queue;
    import java.util.Random;
    import java.util.StringTokenizer;
    import java.util.Vector;
    
    
    
    
    public class Main{
    	
    	public static void main(String[] args) throws IOException{
    		AReader input=new AReader();
    	    PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    
    	    int n=input.nextInt();
    	    Random rd=new Random();
    	    BigInteger[] bm=new BigInteger[3];
    	    long[] lm=new long[3];
    	    for(int i=0;i<3;++i) {
    	    	lm[i]=BigInteger.probablePrime(31, rd).longValue();//mod为素数
    	    	bm[i]=BigInteger.valueOf(lm[i]);
    	    }
    	    long[] a=new long[n+1];
    	    long[] b=new long[n+1];
    	    long[] c=new long[n+1];
    	    HashMap<Long, BigInteger> hs1=new HashMap<Long, BigInteger>();
    	    HashMap<Long, BigInteger> hs2=new HashMap<Long, BigInteger>();
    	    HashMap<Long, BigInteger> hs3=new HashMap<Long, BigInteger>();
    	    HashMap<BigInteger, Integer> Num=new HashMap<BigInteger, Integer>();//A_i映射
    	    int[] num=new int[n+1];//统计相同A_i
    	    int cnt=0;
    	    for(int i=1;i<=n;++i){
    	    	BigInteger x=input.nextBigInteger();
    	    	a[i]=x.mod(bm[0]).longValue();
    	    	b[i]=x.mod(bm[1]).longValue();
    	    	c[i]=x.mod(bm[2]).longValue();
    	    	hs1.put(a[i], x);
    	    	hs2.put(b[i], x);
    	    	hs3.put(c[i], x);
    	    	if(Num.get(x)==null) {
    	    		cnt++;
    	    		Num.put(x, cnt);
    	    		num[cnt]=1;
    	    	}else {
    	    		num[Num.get(x)]++;
    	    	}
    	    }
    	    int ans=0;
    	    for(int i=1;i<=n;++i) {
    	    	for(int j=1;j<=n;++j) {
    	    		
    	    		BigInteger k1=hs1.get(a[i]*a[j]%lm[0]);
    	    		BigInteger k2=hs2.get(b[i]*b[j]%lm[1]);
    	    		BigInteger k3=hs3.get(c[i]*c[j]%lm[2]);
    	    		if(k1==null||k2==null||k3==null)continue;
    	    		
    	    		if(k1.equals(k2)&&k2.equals(k3)) {
    	    			int t=Num.get(k1);
    	    			ans+=num[t];
    	    		}
    	    	}
    	    }
    	    out.print(ans);			
     	    out.flush();
    	    out.close();
    	}
    	static
    	class AReader{
    	    BufferedReader bf;
    	    StringTokenizer st;
    	    BufferedWriter bw;
    
    	    public AReader(){
    	        bf=new BufferedReader(new InputStreamReader(System.in));
    	        st=new StringTokenizer("");
    	        bw=new BufferedWriter(new OutputStreamWriter(System.out));
    	    }
    	    public String nextLine() throws IOException{
    	        return bf.readLine();
    	    }
    	    public String next() throws IOException{
    	        while(!st.hasMoreTokens()){
    	            st=new StringTokenizer(bf.readLine());
    	        }
    	        return st.nextToken();
    	    }
    	    public char nextChar() throws IOException{
    	        //确定下一个token只有一个字符的时候再用
    	        return next().charAt(0);
    	    }
    	    public int nextInt() throws IOException{
    	        return Integer.parseInt(next());
    	    }
    	    public long nextLong() throws IOException{
    	        return Long.parseLong(next());
    	    }
    	    public double nextDouble() throws IOException{
    	        return Double.parseDouble(next());
    	    }
    	    public float nextFloat() throws IOException{
    	        return Float.parseFloat(next());
    	    }
    	    public byte nextByte() throws IOException{
    	        return Byte.parseByte(next());
    	    }
    	    public short nextShort() throws IOException{
    	        return Short.parseShort(next());
    	    }
    	    public BigInteger nextBigInteger() throws IOException{
    	        return new BigInteger(next());
    	    }
    	    public void println() throws IOException {
    	        bw.newLine();
    	    }
    	    public void println(int[] arr) throws IOException{
    	        for (int value : arr) {
    	            bw.write(value + " ");
    	        }
    	        println();
    	    }
    	    public void println(int l, int r, int[] arr) throws IOException{
    	        for (int i = l; i <= r; i ++) {
    	            bw.write(arr[i] + " ");
    	        }
    	        println();
    	    }
    	    public void println(int a) throws IOException{
    	        bw.write(String.valueOf(a));
    	        bw.newLine();
    	    }
    	    public void print(int a) throws IOException{
    	        bw.write(String.valueOf(a));
    	    }
    	    public void println(String a) throws IOException{
    	        bw.write(a);
    	        bw.newLine();
    	    }
    	    public void print(String a) throws IOException{
    	        bw.write(a);
    	    }
    	    public void println(long a) throws IOException{
    	        bw.write(String.valueOf(a));
    	        bw.newLine();
    	    }
    	    public void print(long a) throws IOException{
    	        bw.write(String.valueOf(a));
    	    }
    	    public void println(double a) throws IOException{
    	        bw.write(String.valueOf(a));
    	        bw.newLine();
    	    }
    	    public void print(double a) throws IOException{
    	        bw.write(String.valueOf(a));
    	    }
    	    public void print(char a) throws IOException{
    	        bw.write(String.valueOf(a));
    	    }
    	    public void println(char a) throws IOException{
    	        bw.write(String.valueOf(a));
    	        bw.newLine();
    	    }
    	}
    }
    
    

  • 29
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
docker: Error response from daemon: driver failed programming external connectivity on endpoint registry是指在启动Docker容器时出现的错误,错误信息提示驱动程序无法为注册的端点进行外部连接编程。这个错误通常表明Docker守护进程在尝试使用iptables命令进行端口映射时遇到了问题。 根据引用和引用,这个错误通常是由iptables规则中缺少某些链、目标或匹配项导致的。iptables是一个用于配置Linux内核防火墙的工具,它可以用来创建、修改和删除iptables规则。在这种情况下,Docker守护进程尝试使用iptables命令来创建一个用于端口映射的规则,但由于缺少某些必要的链、目标或匹配项,所以无法成功创建规则,最终导致了该错误的发生。 解决这个问题的方法有几种,可以尝试以下步骤来解决该问题: 1. 检查iptables配置:首先,确保iptables服务已经启动,并且配置正确。可以使用以下命令来检查iptables服务的状态和配置:`sudo service iptables status`。 2. 重新安装Docker:如果iptables配置正确,但问题仍然存在,可以尝试重新安装Docker。可以使用以下命令来卸载和重新安装Docker:`sudo apt-get remove docker-ce`和`sudo apt-get install docker-ce`。 3. 检查网络设置:还可以检查网络设置是否正确,并确保没有其他应用程序或进程占用了Docker所需的端口。可以使用`netstat`命令来检查端口的使用情况:`netstat -tuln`。 4. 更新Docker版本:如果问题仍然存在,可以尝试升级到最新版本的Docker。可以使用以下命令来更新Docker:`sudo apt-get update && sudo apt-get upgrade docker-ce`。 通过检查iptables配置,重新安装Docker,检查网络设置以及升级Docker版本,可以解决docker: Error response from daemon: driver failed programming external connectivity on endpoint registry的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [启动Docker容器报错docker: Error response from daemon: driver failed programming external ...](https://blog.csdn.net/qq_39691492/article/details/125006600)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [docker出现Error response from daemon: driver failed programming external connectivity on endpoint...](https://blog.csdn.net/weixin_47872288/article/details/120201096)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值