最近总是有些创作的欲望……文思如泉涌啊,可能前几天文学青年当多了……

于是,我想起自己还没有一个技术Blog…N久之前的Baidu Blog不适合当技术Blog……

于是我又挖出了这里……话说以前我写的代码还真是烂啊……

这里的内容,目前主要是关于ACM/ICPC 和 TopCoder的一些算法……


今天刷了少许高精度题,用java一一水过……

有一个不为人知的技巧:java的数制转换(2进制~36进制,任意转换) 

BigInteger有个方法,toString(int radix),把10进制数转到2~26进制

但是往回转似乎String就没有toBigInteger()的方法了……

java的Scanner有一个叫做nextBigInteger(int radix)的方法,把输入视作radix进制的数,读入后转成10进制的BigInteger

可以用类似sscanf,stringstream的方法

 1  import  java.util. * ;
 2  import  java.math. * ;
 3 
 4  public   class  Main {
 5       public   static   void  main(String[] args) {
 6          String a = " 1234 " ;
 7          Scanner cin = new  Scanner(a);
 8          BigInteger A = cin.nextBigInteger( 5 );
 9          System.out.println(A);
10      }
11  }
输出的就是1234的十进制表示,爽啊……

 


还有传说中C/C++的猥琐读入法

因为getchar()速度远远快于Scanf,尽管增加了位运算和加减,但是总体上还是优化很大……

 1  inline  int  nextInt()
 2  {
 3       int  ans = 0 char  now;
 4       for  (;;)
 5      {
 6          now = getchar();
 7           if  (now < ' 0 '   ||  now > ' 9 ' break ;
 8          ans = (ans << 3 ) + (ans << 1 ) + now - ' 0 ' ;
 9      }
10       return  ans;
11  }
12 

 

POJ3697,从前1200MS,优化了IO后,进入排名榜前列……