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

于是,我想起自己还没有一个技术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=0char 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后,进入排名榜前列……