| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Jave 的代码好长啊,我打字都这么慢,还是不要用好了In Reply To:AC的代码,与喜欢java的朋友一起切磋! Posted by:Jin_j_y at 2004-10-25 11:49:10 > /*******************************************************************
> *AC的代码,与喜欢java的朋友一起切磋!
> *开始的时候RE了,我想不通是什么原因:不可能是越界,也不可能是IOException。
> *后来judge说可能是nullPointerException,但我还是觉得不可能,
> *于是继续研究题目原文,忽然发现:如果密文中没有a,会怎么办?
> *RE的原因:除数为0!
> ********************************************************************/
> import java.io.*;
> import java.util.*;
>
> public class Main
> {
> public static void main(String[] args)throws Exception
> {
> char [] kc1=new char[85];
> int [] ka1=new int[85];
> char [] kc2=new char[85];
> int [] ka2=new int[85];
> char [] kc3=new char[85];
> int [] ka3=new int[85];
> int k1,k2,k3;
> int num1,num2,num3;
> int i,j;
>
> BufferedReader cin=new BufferedReader(new
> InputStreamReader(System.in));
> String strnum;
> StringTokenizer strtok;
> //Read in the k1,k2,k3;
> strnum=cin.readLine();
> strtok=new StringTokenizer(strnum);
> k1=Integer.parseInt(strtok.nextToken());
> k2=Integer.parseInt(strtok.nextToken());
> k3=Integer.parseInt(strtok.nextToken());
>
> while(!(k1==0&&k2==0&&k3==0)){
> //Read in the encryption
> String str=cin.readLine();
> int size=str.length();
> num1=num2=num3=0;
> char ct;
> int at;
> //Analyse the encryption string
> for(i=0;i<size;++i)
> { ct=str.charAt(i);
> if(ct=='_')at=2;
> else at=(ct-'a')/9;
> switch(at){
> case 0:ka1[num1]=i;kc1[num1]=ct;num1++;break;
> case 1:ka2[num2]=i;kc2[num2]=ct;num2++;break;
> case 2:ka3[num3]=i;kc3[num3]=ct;num3++;break;
> }
> }
> //Rotation
> /**********************************************************
> *RE就在这里!!
> *Maybe there is no letter among the group 1, then num1=0
> **********************************************************/
> if(num1!=0)k1=k1%num1;
> if(num2!=0)k2=k2%num2;
> if(num3!=0)k3=k3%num3;
>
> if(k1!=0&&num1!=0){
> char [] okc1=new char[num1];
> System.arraycopy(kc1,0,okc1,0,num1);
> for(i=0;i<num1;++i){
> j=i+k1;
> if(j>=num1)j-=num1;
> kc1[j]=okc1[i];
> }
> }
>
> if(k2!=0&&num2!=0){
> char [] okc2=new char[num2];
> System.arraycopy(kc2,0,okc2,0,num2);
> for(i=0;i<num2;++i){
> j=i+k2;
> if(j>=num2)j-=num2;
> kc2[j]=okc2[i];
> }
> }
>
> if(k3!=0&&num3!=0){
> char [] okc3=new char[num3];
> System.arraycopy(kc3,0,okc3,0,num3);
> for(i=0;i<num3;++i){
> j=i+k3;
> if(j>=num3)j-=num3;
> kc3[j]=okc3[i];
> }
> }
> //Decryption string
> char[] sstr=new char[size];
> for(i=0;i<num1;++i)
> sstr[ka1[i]]=kc1[i];
> for(i=0;i<num2;++i)
> sstr[ka2[i]]=kc2[i];
> for(i=0;i<num3;++i)
> sstr[ka3[i]]=kc3[i];
> //Output the decryption string
> System.out.println(sstr);
>
> //Handle the new case
> strnum=cin.readLine();
> strtok=new StringTokenizer(strnum);
> k1=Integer.parseInt(strtok.nextToken());
> k2=Integer.parseInt(strtok.nextToken());
> k3=Integer.parseInt(strtok.nextToken());
> }
> }
> }
>
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator