HDU5912模拟





The second line contains n integers:  a1,a2,an(1ai10 ).
The third line contains n integers:  b1,b2,,bn(1bi10) .
C语言课后习题

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) {
    	new Task().solve(); ; 
    }
}

class  Task{  
	Scanner in = new Scanner(new BufferedInputStream(System.in)) ;
	PrintWriter out = new PrintWriter(System.out) ;
	void solve(){
		int t = in.nextInt() ;
		for(int ca = 1 ; ca <= t ; ca++){
			int n = in.nextInt() ;
			BigInteger[] a = new BigInteger[n+1] ;
			BigInteger[] b = new BigInteger[n+1] ;
			for(int i = 1 ; i <= n ; i++) a[i] = in.nextBigInteger() ;
			for(int i = 1 ; i <= n ; i++) b[i] = in.nextBigInteger() ;
			
			BigF tm = new BigF(b[n] , a[n]) ;
			for(int i = n-1 ; i >= 1 ; i--){
				tm = new BigF(a[i]).add(tm) ;
				tm = new BigF(b[i] , tm) ;
			}
			
			out.println("Case #" + ca + ": " + tm.zi + " " + tm.mu) ;
		}
		out.flush() ; 
	}
	
	
	class BigF{
		BigInteger mu , zi ;
		BigF(BigInteger zi , BigInteger mu){
		    BigInteger g = mu.gcd(zi) ;
			mu = mu.divide(g) ;
			zi = zi.divide(g) ;
		    this.mu = mu ;
		    this.zi = zi ;
		}
		BigF(BigInteger zi , BigF mu){
			this.mu = mu.zi ;
			this.zi = zi.multiply(mu.mu) ;
			BigInteger g = this.mu.gcd(this.zi) ;
			this.mu = this.mu.divide(g) ;
			this.zi = this.zi.divide(g) ;
		}
		BigF(BigInteger zi){
		    this.zi = zi ;
		    this.mu = BigInteger.ONE ;
		}
		BigF(){
			
		}
		BigF add(BigF o){
			BigF res = new BigF() ;
			res.mu = this.mu.multiply(o.mu) ;
			res.zi = this.zi.multiply(o.mu) .add( o.zi.multiply(this.mu) ) ;
			BigInteger g = res.mu.gcd(res.zi) ;
			res.mu = res.mu.divide(g) ;
			res.zi = res.zi.divide(g) ;
			return res ;
		}
	}
 
} 

class InputReader {  
    public BufferedReader reader;  
    public StringTokenizer tokenizer;  
  
    public InputReader(InputStream stream) {  
        reader = new BufferedReader(new InputStreamReader(stream), 32768);  
        tokenizer = new StringTokenizer("");  
    }  
  
    private void eat(String s) {  
        tokenizer = new StringTokenizer(s);  
    }  
  
    public String nextLine() {  
        try {  
            return reader.readLine();  
        } catch (Exception e) {  
            return null;  
        }  
    }  
  
    public boolean hasNext() {  
        while (!tokenizer.hasMoreTokens()) {  
            String s = nextLine();  
            if (s == null)  
                return false;  
            eat(s);  
        }  
        return true;  
    }  
  
    public String next() {  
        hasNext();  
        return tokenizer.nextToken();  
    }  
  
    public int nextInt() {  
        return Integer.parseInt(next());  
    }  
  
    public long nextLong() {  
        return Long.parseLong(next());  
    }  
  
    public double nextDouble() {  
        return Double.parseDouble(next());  
    }  
  
    public BigInteger nextBigInteger() {  
        return new BigInteger(next());  
    }  
  
}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值