Java笔记3 : Java在ACM中的便利应用(未完待续)

  Java由于官方API丰富,可以用在ACM比赛时抢一血,后台服务器配置多核时还可以利用多线程优化时间常数,当初我一直有这些想法,不过现在退出了,没法实践一下了,想想都觉得伤感啊。。。

 

一、正则表达式。

ACM中很多字符串处理的题,而且大多不会超时,只是考模拟的能力,所以可以借助正则表达式偷个懒,下面是一个例子:

题目: SDUT 1205 C语言实验——合法的C标识符

链接:

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1205

 

1 public class Main {

2     public static void main(String[] args) {

3         String s = new java.util.Scanner(System.in).nextLine();

4         System.out.println(s.matches("[a-zA-Z_][a-zA-Z0-9_]{0,}") ? "YES" : "NO");

5     }

6 }

不得不说,4行搞定很简单,不用debug了。。

 

二、日期计算。

经常见到数日子的题,向前数或向后数,或者判断闰年,或者判断星期,反正各种烦,一不小心就数错,利用Calendar类简单搞定,下面仍然是例子:

题目: SDUT 2558 数日子

链接: http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2558

 1 import java.util.Calendar;

 2 import java.util.Scanner;

 3 

 4 public class Main {

 5     public static void main(String[] args) {

 6         String[] week = {"", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

 7         Calendar calendar = Calendar.getInstance();

 8         Scanner input = new Scanner(System.in);

 9         while(input.hasNext()) {

10             calendar.set(2000, 0, 1);

11             int n = input.nextInt();

12             calendar.add(Calendar.DAY_OF_YEAR, n);

13             System.out.printf("%4d-%02d-%02d %s\n", calendar.get(Calendar.YEAR), (calendar.get(Calendar.MONTH) + 1), calendar.get(Calendar.DAY_OF_MONTH),  week[calendar.get(Calendar.DAY_OF_WEEK)]);

14         }

15     }

16 }

 

三、输出格式限制。

这个就不细说了,主要利用各种format成员函数,或者利用正则表达式。

你可能感兴趣的:(java)