您的位置:首页 > 编程语言 > Java开发

ZOJ 1151: Word Reversal

2013-10-26 02:55 330 查看
简单题,但测试数据量难道有几十万行么!

不能用Java的scanner 和 每行printf 这样做一定会TLE,一开始没意识到是I/O效率问题,还傻乎乎的想怎么优化。。。 被坑死了...

一模一样的算法 把IO换上BufferedReader和StringBuilder之后 190ms过了...

居然会差这么多!!!

题目本身的意思就是 每行会给出一系列用空格分隔的单词 读取然后每个单词反序输出

鉴于以上坑爹属性,难度系数=1

通过率数据:22.56% (6863/30411)

贴代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main
{
public static void main(String[] args) throws IOException
{
int N;
int i;
int M;
int j;
String s;
int x;

BufferedReader bi = new BufferedReader(new InputStreamReader(System.in)); //这货用来取代scanner
StringBuilder sb = new StringBuilder(); //这个用来做输出buffer
StringTokenizer tk = new StringTokenizer(""); //这个类可以用来从字符串取词 比循环快
String line="";
while (line.length()==0)
line=bi.readLine();   //取代 scanner.nextline

N=Integer.parseInt(line);

for (i=0;i<N;i++)
{
line="";
while (line.length()==0)
line=bi.readLine();

M=Integer.parseInt(line);

for (j=0;j<M;j++)
{
line=bi.readLine();
tk=new StringTokenizer(line);
while (tk.hasMoreTokens())
{
s=tk.nextToken();
for (x=s.length()-1;x>=0;x--)
{
sb.append(s.charAt(x));
}
if (tk.hasMoreTokens()) sb.append(' ');
}
sb.append("\n");
}
if (i<N-1) sb.append("\n");
}
System.out.print(sb);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ZOJ水题 Java