ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1002. Телефонные номера

my program for 1002 why the answer is wrong??
Послано freedomyunfei 7 май 2008 18:35
why the answer is wrong??
who can give me a reply? thank you very much!

import java.io.BufferedInputStream;
import java.util.Scanner;

public class Z1002
{
    public static void main(String args[])
    {
        Z1002 g=new Z1002();
        g.dowork();

    }
    int kb=0;
    String s="";
    int c=0;
    String sz[];
    String sjg[];
    int changdu=0;
    int  xx=0;

    Scanner sca = new Scanner(new BufferedInputStream(System.in));
    void get()
    {

        s=sca.next();

        xx=Integer.parseInt(""+s.charAt(0)+s.charAt(1));

        if(xx!=-1)
        {
        sjg=new String[50000];

        for(int i=0;i<50000;i++)
        {
            sjg[i]="";
        }

        c=sca.nextInt();

        sz=new String[c];

        for(int i=0;i<c;i++)
        {

            sz[i]=sca.next();
        }

        }
    }
    void work(int x)
    {


        String bk[]=new String[50000];
        int bb=0;
        String mm="";

            mm=duiying(s.charAt(x));



        for(int i=0;i<c;i++)
        {
            for(int j=0;j<mm.length();j++)
            {

                if(mm.charAt(j)==sz[i].charAt(0))
                {
                    bk[bb]=sz[i];

                    bb=bb+1;
                }
            }
        }
        for(int i=0;i<bb;i++)
        {

            if(changdu+bk[i].length()<=s.length())

            {


                if(fanyi(bk[i]).equals(s.substring(x,x+bk[i].length())))
                {

                    sjg[kb]=sjg[kb]+bk[i]+" ";
                    changdu=changdu+bk[i].length();
                    if(changdu==s.length())
                    {

                        kb=kb+1;
                    }
                    else
                    {
                        if(changdu<s.length())
                        {

                            work(x+bk[i].length());
                        }

                    }



                }



            }
        }



    }
    void paisu()
    {
        for(int i=0;i<kb;i++)//排序;
        {
            for(int j=kb-1;j>=0;j--)
            {
                if(sjg[j].length()<sjg[j-1].length())
                {
                    String t=sjg[j];
                    sjg[j]=sjg[j-1];
                    sjg[j-1]=t;

            }
            }

        }

    }
    void out()
    {
        if(changdu!=s.length())
        {

            System.out.println("No solution.");
            changdu=0;
            kb=0;
        }else
        {
        System.out.println(sjg[0]);
        changdu=0;
        kb=0;
        }
        for(int i=0;i<50000;i++)
        {
            sjg[i]="";
        }
    }
    String duiying(char x)
    {
        String fanhui="";
        if(x=='0')
        {
                fanhui=fanhui+"oqz";
        }
        if(x=='1')
        {
            fanhui=fanhui+"ij";
        }
        if(x=='2')
        {
            fanhui=fanhui+"abc";
        }
        if(x=='3')
        {
            fanhui=fanhui+"def";
        }
        if(x=='4')
        {
            fanhui=fanhui+"gh";
        }
        if(x=='5')
        {
            fanhui=fanhui+"kl";
        }
        if(x=='6')
        {
            fanhui=fanhui+"mn";
        }
        if(x=='7')
        {
            fanhui=fanhui+"prs";
        }
        if(x=='8')
        {
            fanhui=fanhui+"tuv";
        }
        if(x=='9')
        {
            fanhui=fanhui+"wxy";
        }
        return fanhui;
    }
    String fanyi(String kk)
    {

        int l=kk.length();
        String fanhui="";
        for(int i=0;i<l;i++)
        {
            if(kk.charAt(i)=='a')
            {
                fanhui=fanhui+2;
            }
            if(kk.charAt(i)=='b')
            {
                fanhui=fanhui+2;
            }
            if(kk.charAt(i)=='c')
            {
                fanhui=fanhui+2;
            }
            if(kk.charAt(i)=='d')
            {
                fanhui=fanhui+3;
            }
            if(kk.charAt(i)=='e')
            {
                fanhui=fanhui+3;
            }
            if(kk.charAt(i)=='f')
            {
                fanhui=fanhui+3;
            }
            if(kk.charAt(i)=='g')
            {
                fanhui=fanhui+4;
            }
            if(kk.charAt(i)=='h')
            {
                fanhui=fanhui+4;
            }
            if(kk.charAt(i)=='i')
            {
                fanhui=fanhui+1;
            }
            if(kk.charAt(i)=='j')
            {
                fanhui=fanhui+1;
            }
            if(kk.charAt(i)=='k')
            {
                fanhui=fanhui+5;
            }
            if(kk.charAt(i)=='l')
            {
                fanhui=fanhui+5;
            }
            if(kk.charAt(i)=='m')
            {
                fanhui=fanhui+6;
            }
            if(kk.charAt(i)=='n')
            {
                fanhui=fanhui+6;
            }
            if(kk.charAt(i)=='o')
            {
                fanhui=fanhui+0;
            }
            if(kk.charAt(i)=='p')
            {
                fanhui=fanhui+7;
            }
            if(kk.charAt(i)=='q')
            {
                fanhui=fanhui+0;
            }
            if(kk.charAt(i)=='r')
            {
                fanhui=fanhui+7;
            }
            if(kk.charAt(i)=='s')
            {
                fanhui=fanhui+7;
            }
            if(kk.charAt(i)=='t')
            {
                fanhui=fanhui+8;
            }
            if(kk.charAt(i)=='u')
            {
                fanhui=fanhui+8;
            }
            if(kk.charAt(i)=='v')
            {
                fanhui=fanhui+8;
            }
            if(kk.charAt(i)=='w')
            {
                fanhui=fanhui+9;
            }
            if(kk.charAt(i)=='x')
            {
                fanhui=fanhui+9;
            }
            if(kk.charAt(i)=='y')
            {
                fanhui=fanhui+9;
            }
            if(kk.charAt(i)=='z')
            {
                fanhui=fanhui+0;
            }


        }
        return fanhui;
    }
    void dowork()
    {

        get();

            while(xx!=-1)
            {

              work(0);
              out();
            }




    }

}