Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.math.BigInteger;
- import java.util.Scanner;
- class Dropka
- {
- public BigInteger broitel;
- public BigInteger imenitel;
- public Dropka(Dropka d)
- {
- imenitel = d.imenitel;
- broitel = d.broitel;
- }
- public Dropka(BigInteger a, BigInteger b)
- {
- broitel = a;
- imenitel = b;
- }
- public void add(Dropka rhs)
- {
- if(!rhs.imenitel.equals(this.imenitel))
- {
- if(rhs.imenitel.compareTo(this.imenitel) > 0)
- {
- this.broitel = this.broitel.multiply(rhs.imenitel.divide(this.imenitel));
- this.imenitel = this.imenitel.multiply(rhs.imenitel.divide(this.imenitel));
- }
- else
- rhs.broitel = rhs.broitel.multiply(this.imenitel.divide(rhs.imenitel));
- }
- this.broitel = this.broitel.add(rhs.broitel);
- }
- public void addOne()
- {
- broitel = broitel.add(imenitel);
- }
- public void divideByTwo()
- {
- imenitel = imenitel.multiply(new BigInteger("2"));
- }
- public void pecati()
- {
- System.out.println(broitel);
- System.out.println(imenitel);
- }
- public void skrati()
- {
- BigInteger dva = new BigInteger("2");
- BigInteger nula = new BigInteger("0");
- while(broitel.mod(dva).equals(nula) && imenitel.mod(dva).equals(nula))
- {
- broitel = broitel.divide(dva);
- imenitel = imenitel.divide(dva);
- }
- }
- }
- public class VISChallenge {
- private static Dropka[][] DP;
- private static int N;
- private static int K;
- private static Dropka f(int x, int y)
- {
- if(DP[x][y] != null)
- return DP[x][y];
- if(x + y == K)
- DP[x][y] = new Dropka(new BigInteger("0"),new BigInteger("1"));
- else if(x == y)
- {
- DP[x][y] = new Dropka(f(x+1,y));
- DP[x][y].addOne();
- }
- else if(y == K-N)
- DP[x][y] = new Dropka(f(x+1,y));
- else if(x == N-1)
- DP[x][y] = new Dropka(f(x,y+1));
- else
- {
- DP[x][y] = new Dropka(f(x+1,y));
- DP[x][y].add(f(x,y+1));
- DP[x][y].divideByTwo();
- DP[x][y].addOne();
- }
- return DP[x][y];
- }
- public static void main(String[] args) {
- Scanner in = new Scanner(System.in);
- N = in.nextInt();
- K = in.nextInt();
- DP = new Dropka[N+1][K-N+1];
- f(0,0);
- DP[0][0].skrati();
- DP[0][0].pecati();
- in.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement