| ||||||||||
| 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 | |||||||||
AC的代码,与喜欢java的朋友一起切磋!/*******************************************************************
*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