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