Pages

Friday, 4 January 2013

UVA - 12243 - Flowers Flourish from France


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 (true) {
            m = br.readLine();
            if (m.equals("*")) {
                break;
            }
            StringTokenizer st = new StringTokenizer(m);
            char tempU = 0, tempL = 0;
            Boolean can = true;
            int n = st.countTokens();
            for (int i = 0; i < n; i++) {
                char temp = st.nextToken().charAt(0);
                if (i == 0) {
                    if (temp > 96) {
                        tempL = temp;
                        tempU = (char) (temp - 32);
                    } else {
                        tempL = (char) (temp + 32);
                        tempU = temp;
                    }
                } else {
                    if (temp != tempU && temp != tempL) {
                        can = false;
                        break;
                    }
                }
            }
            if (can) {
                sb.append("Y\n");
            } else {
                sb.append("N\n");
            }
        }
        System.out.print(sb);
    }
}

Thursday, 3 January 2013

UVA - 671 - Spell checker

//Don't USE Edit Distance .. It will give you TLE ... :)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashMap;
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));
        StringBuffer sb = new StringBuffer("");
        String m = "";
        int cases=Integer.parseInt(br.readLine());
        for(int i=0;i<cases;i++){
            if(i>0)
                sb.append("\n");
            br.readLine();
            HashMap<String,Integer> hm=new HashMap<String,Integer>();
            int ind=1;
            while(true){
                m=br.readLine();
                hm.put(m,ind);
                ind++;
            }
          
            while(true){
                m=br.readLine();
                if(m.equals("#")){
                    break;
                }
                if(hm.containsKey(m)){
                   sb.append(m).append(" is correct\n");
                }else{
                    sb.append(m).append(":");
                    HashSet<String> added=new HashSet<String>();
                    LinkedList<Word> list=new LinkedList<Word>();
                    //delete one character
                    for(int j=0;j<m.length();j++){
                       StringBuilder temp=new StringBuilder();
                       for(int z=0;z<m.length();z++){
                           if(z!=j)
                            temp.append(m.charAt(z));
                        }
                       String wanted=temp.toString();
                       if(!added.contains(wanted)){
                           if(hm.containsKey(wanted)){
                               list.add(new Word(wanted, hm.get(wanted)));
                               added.add(wanted);
                           }
                       }
                    }
                    //replacing one character
                    for(int j=0;j<m.length();j++){
                       StringBuilder temp=new StringBuilder();
                       for(int z=0;z<m.length();z++){
                           if(z!=j)
                                temp.append(m.charAt(z));
                        }
                        for (int l = 0; l < 27; l++) {
                            StringBuilder temp2=new StringBuilder(temp.toString());
                            temp2.insert(j, (char)('a'+l));
                            String wanted = temp2.toString();
                            if (!added.contains(wanted)) {
                                if (hm.containsKey(wanted)) {
                                    list.add(new Word(wanted, hm.get(wanted)));
                                    added.add(wanted);
                                }
                            }
                       }
                     
                    }
                    //inserting one character
                    for(int j=0;j<m.length()+1;j++){
                       StringBuilder temp=new StringBuilder(m);
                       for (int l = 0; l < 27; l++) {
                            StringBuilder temp2=new StringBuilder(temp.toString());
                            temp2.insert(j, (char)('a'+l));
                            String wanted = temp2.toString();
                            if (!added.contains(wanted)) {
                                if (hm.containsKey(wanted)) {
                                    list.add(new Word(wanted, hm.get(wanted)));
                                    added.add(wanted);
                                }
                            }
                       }
                     
                    }
                    Collections.sort(list);
                    while(!list.isEmpty()){
                        sb.append(" ").append(list.remove().getWord());
                    }
                    sb.append("\n");
                }
            }
          
        }
        System.out.print(sb);
    }
  
}class Word implements Comparable<Word>{
    String word;
    int index;

    public Word(String word, int index) {
        this.word = word;
        this.index = index;
    }

    public int getIndex() {
        return index;
    }

    public String getWord() {
        return word;
    }
  
  
    @Override
    public int compareTo(Word o) {
        if(this.index>o.getIndex()){
            return 1;
        }
        return -1;
    }
  
}

UVA - 644 - Immediate Decodability


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

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 = "";
        LinkedList<String> list=new LinkedList<String>();
        int cases=1;
        while((m=br.readLine())!=null){
            while(!m.equals("9")){
                list.add(m);
                m=br.readLine();
            }
            String[]arr=new String[list.size()];
            for(int i=0;i<arr.length;i++){
                arr[i]=list.remove();
            }
            boolean pre=false;
            for(int i=0;i<arr.length-1;i++){
                for(int j=i+1;j<arr.length;j++){
                    if(isPrefix(arr[i],arr[j])){
                        pre=true;
                        break;
                    }
                }
                if(pre)
                    break;
            }
            if(pre){
                sb.append("Set ").append(cases).append(" is not immediately decodable\n");
            }
            else{
                sb.append("Set ").append(cases).append(" is immediately decodable\n");
            }
            cases++;
        }
        System.out.print(sb);
    }
   
    static boolean isPrefix(String x,String y){
        for(int i=0,j=0;i<Math.min(x.length(), y.length());i++){
            if(x.charAt(i)!=y.charAt(i)){
                return false;
            }
        }
        return true;
    }
}

Wednesday, 2 January 2013

UVA - 468 - Key to Success

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;

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="";
        int cases=Integer.parseInt(br.readLine());
        for (int i = 0; i < cases; i++) {
            br.readLine();
            if(i>0)
                sb.append("\n");
            m=br.readLine();
            charFreq []arr1=new charFreq[52];
            for(int j=0;j<26;j++){
                arr1[j]=new charFreq((char)('a'+j), 0);
                arr1[j+26]=new charFreq((char)('A'+j), 0);
            }
            for(int j=0;j<m.length();j++){
                if(m.charAt(j)>='a'&&m.charAt(j)<='z'){
                    arr1[m.charAt(j)-'a'].inc();
                }else if(m.charAt(j)>='A'&&m.charAt(j)<='Z'){
                    arr1[m.charAt(j)-'A'+26].inc();
                }
            }
            Arrays.sort(arr1);
            m=br.readLine();
            charFreq []arr2=new charFreq[52];
            for(int j=0;j<26;j++){
                arr2[j]=new charFreq((char)('a'+j), 0);
                arr2[j+26]=new charFreq((char)('A'+j), 0);
            }
            for(int j=0;j<m.length();j++){
                if(m.charAt(j)>='a'&&m.charAt(j)<='z'){
                    arr2[m.charAt(j)-'a'].inc();
                }else if(m.charAt(j)>='A'&&m.charAt(j)<='Z'){
                    arr2[m.charAt(j)-'A'+26].inc();
                }
            }
            Arrays.sort(arr2);
            HashMap<Integer,Integer> hm=new HashMap<Integer, Integer>();
            for(int j=arr1.length-1;j>-1;j--){
               hm.put((int)(arr2[j].getC()),(int) (arr1[j].getC()));
            }
            for(int j=0;j<m.length();j++){
                int temp=(hm.get((int)(m.charAt(j))));
                char x=(char) temp;
                sb.append(x);
            }
            sb.append("\n");
        }
        System.out.print(sb);
    }
}
   /*      
           
           
           
        }
       
    }
   
}*/
class charFreq implements Comparable<charFreq> {
    char c;
    int freq;

    public charFreq(char c, int freq) {
        this.c = c;
        this.freq = freq;
    }

    public char getC() {
        return c;
    }

    public int getFreq() {
        return freq;
    }
   
    public void inc(){
        freq++;
    }
    @Override
    public int compareTo(charFreq o) {
        if(this.freq>o.getFreq()){
            return 1;
        }
        return -1;
    }
   
}

UVA - 10036 - Divisibility

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="";
        int cases=Integer.parseInt(br.readLine());
        for (int i = 0; i < cases; i++) {
            StringTokenizer st=new StringTokenizer(br.readLine());
            int n=Integer.parseInt(st.nextToken());
            int num=Integer.parseInt(st.nextToken());
            int rem=0;
            st=new StringTokenizer(br.readLine());
            int temp[]=new int[n];
            short[][]arr=new short[n+1][101];
            for(int j=0;j<n;j++){
                temp[j]=Math.abs(Integer.parseInt(st.nextToken()));
            }
            for(int j=0;j<n;j++){
                for(int l=0;l<101;l++){
                    arr[j][l]=2;
                }
            }
            if(sum(temp, 0, num, 0,arr)==0){
                sb.append("Divisible\n");
            }else{
                sb.append("Not divisible\n");
            }
        }
        System.out.print(sb);
    }
  
    static short sum(int[]nums,int i,int k,int sum,short[][] arr){
        if(i==nums.length){
            if(sum%k==0){
                return 0;
            }
            return 1;
        }
        int mod=sum%k;
        if(mod<0)
            mod+=k;
        if(arr[i][mod]!=2){
            return arr[i][mod%k];
        }
        arr[i][mod]=(short) Math.min(sum(nums,i+1,k,(sum+nums[i]),arr),sum(nums,i+1,k,(sum-nums[i]),arr));
        return arr[i][mod];
    }
}

Tuesday, 1 January 2013

UVA - 10815 - Andy's First Dictionary

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));
        StringBuffer sb = new StringBuffer("");
        HashSet<String> hs = new HashSet<String>();
        LinkedList<String> list = new LinkedList<String>();
        String m = "";
        while ((m = br.readLine()) != null) {
           /* if (m.equals("#")) {
                break;
            }*/
            StringBuilder temp = new StringBuilder();
            for (int i = 0; i < m.length(); i++) {
                if ((m.charAt(i) >= 'a' && m.charAt(i) <= 'z')
                        || (m.charAt(i) >= 'A' && m.charAt(i) <= 'Z')) {
                    temp.append(m.charAt(i));
                } else {
                    String word = temp.toString().toLowerCase();
                    temp = new StringBuilder();
                    if (word.equals("")) {
                        continue;
                    }
                    if (!hs.contains(word)) {
                        list.add(word);
                        hs.add(word);
                    }
                }
            }
            String word = temp.toString().toLowerCase();
            if (word.equals("")) {
                continue;
            }
            if (!hs.contains(word)) {
                list.add(word);
                hs.add(word);
            }
        }

        Collections.sort(list);
        while (!list.isEmpty()) {
            sb.append(list.remove()).append("\n");
        }
        System.out.print(sb);
    }
}

UVA - 11239 - Open Source

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

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuffer sb = new StringBuffer("");
        boolean flag=true;
        while(true){
            HashMap <String,Integer> hm=new  HashMap<String, Integer>();
            HashMap <String,String> id=new HashMap <String,String>();
            LinkedList<String> prj=new  LinkedList<String>();
            String last="";
            while (true) {
                    String temp=br.readLine().trim();
                    if(temp.equals("1")){
                        break;
                    }
                    if(temp.equals("0")){
                        flag=false;
                        break;
                    }
                    if(temp.charAt(0)>='a' &&temp.charAt(0)<='z'){
                        if(!id.containsKey(temp)){
                            id.put(temp, last);
                            int tempC=hm.get(last)+1;
                            hm.put(last, tempC);
                        }else{
                            String projtemp=id.get(temp);
                            if(projtemp.equals(last)||projtemp.equals("Banned")){
                                continue;
                            }
                            int projDec=hm.get(projtemp)-1;
                            hm.put(projtemp, projDec);
                            id.put(temp,"Banned");
                        }
                    }
                    if(temp.charAt(0)>='A' &&temp.charAt(0)<='Z'){
                        if(!hm.containsKey(temp)){
                            hm.put(temp, 0);
                            prj.add(temp);
                        }
                        last=temp;
                    }
                }
            if(!flag){
                break;
            }
            LinkedList<Project> list=new LinkedList<Project>();
            while(!prj.isEmpty()){
                String projN=prj.remove();
                int tempC=hm.get(projN);
                list.add(new Project(projN, tempC));
            }
            Collections.sort(list);
            while(!list.isEmpty()){
                Project temp=list.removeLast();
                sb.append(temp.getName()).append(" ").append(temp.getCounter()).append("\n");
            }
        }
        System.out.print(sb);
    }
}
class Project implements Comparable<Project>{
    private String name;
    private int counter;

    public Project(String name, int counter) {
        this.name = name;
        this.counter = counter;
    }

    public int getCounter() {
        return counter;
    }

    public String getName() {
        return name;
    }
   
    @Override
    public int compareTo(Project o) {
        if(this.counter>o.getCounter()){
            return 1;
        }
        if(this.counter<o.getCounter()){
            return -1;
        }else{
            if(this.name.compareTo(o.getName())>-1){
                return -1;
            }else{
                return 1;
            }
        }
    }
}