Pages

Sunday 31 March 2013

UVA - 10341 - Solve It

//Root finding algorithm using newton method
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuffer sb = new StringBuffer();
        String m="";
        while((m=br.readLine())!=null){
            if("#".equals(m.trim()))
                break;
            StringTokenizer st=new StringTokenizer(m);
            int p=Integer.parseInt(st.nextToken()),
                    q=Integer.parseInt(st.nextToken()),
                    r=Integer.parseInt(st.nextToken()),
                    s=Integer.parseInt(st.nextToken()),
                    t=Integer.parseInt(st.nextToken()),
                    u=Integer.parseInt(st.nextToken());
            if(function(0, p, q, r, s, t, u) *function(1, p, q, r, s, t, u)>0){
               sb.append("No solution\n");
            }else{
               sb.append(String.format("%.4f\n",netwonMethod(p, q, r, s, t, u)));
            }
        }
        System.out.print(sb);
    }
    static double function(double i,int p,int q,int r,
                            int s,int t,int u){
        return 1.0*p*Math.exp(-i)+1.0*q*Math.sin(i)
                        +1.0*r*Math.cos(i)+1.0*s*Math.tan(i)+t*i*i+u;
    }
  
    static double dfunction(double i,int p,int q,int r,
                            int s,int t,int u){
        return -1.0*p*Math.exp(-i)+1.0*q*Math.cos(i)
                        -1.0*r*Math.sin(i)+1.0*s/(Math.cos(i)*Math.cos(i))+2*t*i;
    }
  
    static double netwonMethod(int p,int q,int r,
                            int s,int t,int u){
        if(function(0, p, q, r, s, t, u) ==0)
            return 0;
        double ans=0.5;
        while (true){
            double newans = ans - function(ans, p, q, r, s, t, u)/dfunction(ans, p, q, r, s, t, u);
            if (Math.abs(newans-ans) < eps)
                return ans;
            ans=newans;
        }
    }
    static double eps=1E-7;
}


Thursday 28 March 2013

UVA - 10363 - Tic Tac Toe


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuffer sb = new StringBuffer();
        int cases = Integer.parseInt(br.readLine().trim());
        for (int i = 0; i < cases; i++) {
            if (i > 0) {
                br.readLine();
            }
            int counterX = 0, counterO = 0;
            String str = "";
            boolean[][] arrX = new boolean[3][3];
            boolean[][] arrO = new boolean[3][3];
            for (int j = 0; j < 3; j++) {
                str = br.readLine();
                for (int z = 0; z < 3; z++) {
                    if (str.charAt(z) == 'X') {
                        counterX++;
                        arrX[j][z] = true;
                    }
                    if (str.charAt(z) == 'O') {
                        counterO++;
                        arrO[j][z] = true;
                    }
                }
            }
            if (win(arrX) && win(arrO)) {
                sb.append("no\n");
            }else if (win(arrO) &&counterX!=counterO) {
                sb.append("no\n");
            }else if (win(arrX) &&counterX!=counterO+1) {
                sb.append("no\n");
            }else {
                if (counterO == counterX) {
                    sb.append("yes\n");
                } else if (counterO + 1 == counterX) {
                    sb.append("yes\n");
                } else {
                    sb.append("no\n");
                }
            }
        }
        System.out.print(sb);
    }

    static boolean win(boolean[][] arr) {
        for (int i = 0; i < 3; i++) {
            boolean flag = true;
            for (int j = 0; j < 3; j++) {
                flag &= arr[i][j];
            }
            if (flag) {
                return true;
            }
        }
        for (int i = 0; i < 3; i++) {
            boolean flag = true;
            for (int j = 0; j < 3; j++) {
                flag &= arr[j][i];
            }
            if (flag) {
                return true;
            }
        }
        if (arr[0][0] && arr[1][1] && arr[2][2]) {
            return true;
        }
        if (arr[2][0] && arr[1][1] && arr[0][2]) {
            return true;
        }
        return false;
    }
}


Thursday 14 March 2013

Sunday 10 March 2013

UVA - 320 - Border


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int cases = Integer.parseInt(br.readLine());
        for (int i = 0; i < cases; i++) {
            sb.append("Bitmap #").append(i+1).append("\n");
            StringTokenizer st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
            char[][] arr = new char[32][32];
            for (int j = 0; j < 32; j++) {
                for (int z = 0; z < 32; z++) {
                    arr[j][z] = '.';
                }
            }
            StringBuilder str = new StringBuilder(br.readLine());
            for (int j = 0; j < str.length(); j++) {
                 if (str.charAt(j) == 'E') {
                    x++;
                    arr[x-1][y-1] = 'X';
                   
                } else if (str.charAt(j) == 'W') {
                        x--;
                        arr[x][y] = 'X';
                       
                } else if (str.charAt(j) == 'N') {
                        y++;
                        arr[x][y-1] = 'X';
                } else if (str.charAt(j) == 'S') {
                    y--;
                    arr[x-1][y] = 'X';
                }
            }
            for (int j = 31; j >-1; j--) {
                for (int z = 0; z < 32; z++) {
                    sb.append(arr[z][j]);
                }
                sb.append("\n");
            }
            sb.append("\n");
        }
        System.out.print(sb);
    }
}

UVA - 10100 - Longest Match


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int cases = 1;
        String m = "";
        while ((m = br.readLine()) != null) {
            if (m.equals("#")) {
                break;
            }
            sb.append(String.format("%2d. ", cases));
            cases++;
            String str = br.readLine();
            if (m.equals("") || str.equals("")) {
                sb.append("Blank!\n");
                continue;
            }
            StringBuilder temp = new StringBuilder();
            LinkedList<String> list=new LinkedList<String>();
            for (int i = 0; i < m.length(); i++) {
                char c = m.charAt(i);
                if (c >= 'a' && c <= 'z') {
                    temp.append(c);
                } else if (c >= 'A' && c <= 'Z') {
                    temp.append(c);
                } else if (c >= '0' && c <= '9') {
                    temp.append(c);
                } else {
                    if (!temp.toString().equals("")) {
                        list.add(temp.toString());
                        temp = new StringBuilder();
                    }
                }
            }
            if (!temp.toString().equals("")) {
                list.add(temp.toString());
            }
            LinkedList<String> list2=new LinkedList<String>();
            temp = new StringBuilder();
            int counter = 0;
            HashSet<String> tempSet = new HashSet<String>();
            for (int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);
                if (c >= 'a' && c <= 'z') {
                    temp.append(c);
                } else if (c >= 'A' && c <= 'Z') {
                    temp.append(c);
                } else if (c >= '0' && c <= '9') {
                    temp.append(c);
                } else {
                    if (!temp.toString().equals("")) {
                        list2.add(temp.toString());
                        temp = new StringBuilder();
                    }
                }
            }
            if (!temp.toString().equals("")) {
                list2.add(temp.toString());
            }
            String[]arr=new String[list.size()],arr2=new String[list2.size()];
            int index=0;
            while(!list.isEmpty()){
                arr[index]=list.remove();
                index++;
            }
            index=0;
            while(!list2.isEmpty()){
                arr2[index]=list2.remove();
                index++;
            }
            sb.append("Length of longest match: ").append(LCS(arr, arr2)).append("\n");
        }
        System.out.print(sb);
    }
   
    static int LCS(String[] m, String[] n) {
        int[][] arr = new int[m.length + 1][n.length + 1];
        for (int i = 0; i < m.length + 1; i++) {
            arr[i][0] = 0;
        }
        for (int i = 0; i < n.length + 1; i++) {
            arr[0][i] = 0;
        }
        for (int i = 0; i < m.length; i++) {
            for (int j = 0; j < n.length; j++) {
                if (m[i].equals(n[j])) {
                    arr[i + 1][j + 1] = arr[i][j] + 1;
                }else{
                   arr[i+1][j+1]=Math.max(arr[i+1][j],arr[i][j+1]);
                }
            }
        }
        return arr[m.length][n.length];
    }
}

Thursday 7 March 2013

UVA - 12043 - Divisors

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuffer sb = new StringBuffer();
        long[] sums = new long[100 * 1000 + 1], counters = new long[100 * 1000 + 1];
        for (int i = 1; i < 100 * 1000 + 1; i++) {
            Point p = factors(i);
            counters[i] = (int) p.getX();
            sums[i] = (int) p.getY();
        }
        int cases = Integer.parseInt(br.readLine().trim());
        for (int i = 0; i < cases; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine().trim());
            int a = 0, b = 0, k = 0;
            a = Integer.parseInt(st.nextToken());
            b = Integer.parseInt(st.nextToken());
            k = Integer.parseInt(st.nextToken());
            long sum = 0;
            long counter = 0;
            for (int j = a; j < b + 1; j++) {
                if (j % k == 0) {
                    counter += counters[j];
                    sum += sums[j];
                }
            }
            sb.append(counter).append(" ").append(sum).append("\n");
        }
        System.out.print(sb);
    }

    static Point factors(int x) {
        long sum = 0;
        long counter = 0;
        for (int i = 1; i <= Math.sqrt(x); i++) {
            if (x % i == 0) {
                counter++;
                sum += i;
                if (x / i != i) {
                    sum += x / i;
                    counter++;
                }
            }
        }
        return new Point(counter, sum);
    }
}
class Point {
    private long x;
    private long y;

    public Point(long x, long y) {
        this.x = x;
        this.y = y;
    }

    public long getX() {
        return x;
    }

    public void setX(long x) {
        this.x = x;
    }

    public long getY() {
        return y;
    }

    public void setY(long y) {
        this.y = y;
    }
   
}