在http://poj.org/上用JAVA解题一般用Scanner类来进行输入,但对时间要求严格的题,用它可能会超时,我解POJ1823的时候就遇到这样的问题,后改用StreamTokenizer类进行输入,就过了。看来后者处理输入的效率要高点。
现小结如下:
1、类java.io.StreamTokenizer可以获取输入流并将其分析为Token(标记)。
StreamTokenizer的nextToken方法读取下一个标记
2、默认情况下,StreamTokenizer认为下列内容是Token:字母、数字、除c和c++注释符号以外的其他符号。
如符号“/”不是Token,注释后的内容也不是,而"/"是Token。单引号和双引号以及其总的内容,只能算一个Token。
3、字段摘要
4、 构造方法:
public StreamTokenizer(Reader r)
为了提高效率,使用BufferedReader,如下,创建StreamTokenizer对象
StreamTokenizer st =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
5、为了从流中获取标记,可以调用StreamTokenizer的nextToken()方法。
调用nextToken()方法以后,如果标记是字符串,可用 String s=st.sval,如果是整数用 int n=(int) st.nval得到。
例:poj1823的输入(见
http://128kj.iteye.com/blog/1739733
public static void main(String[] args) throws IOException{
//注:用Scanner in=new Scanner(System.in)超时!!!!!!!!
StreamTokenizer st = new StreamTokenizer(new BufferedReader(
new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
// while(st.nextToken() != StreamTokenizer.TT_EOF)
st.nextToken();
int n= (int) st.nval;
st.nextToken();
int p=(int) st.nval;
Main ma=new Main();
int sign;
int ll,rr;
ma.build(1,1,n);
for(int i=0;i<p;i++){
st.nextToken();
sign=(int) st.nval;
if(sign==3){
out.printf("%d\n",ma.getMax());
}else{
st.nextToken();
ll=(int) st.nval;
st.nextToken();
rr=(int) st.nval;
rr=ll+rr-1;
if(sign==2)
sign=0;
ma.update(1,ll,rr,sign);
}
}
out.flush();
}
}
另一个示例:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
public class Test2 {
public static void main(String[] args) {
int type;
StreamTokenizer tok = new StreamTokenizer(new BufferedReader(
new InputStreamReader(System.in)));
System.out.println("please input :");
try {
while((type=tok.nextToken())!=tok.TT_EOL){
if(type==tok.TT_NUMBER){
System.out.println(tok.nval);
}else if(type==tok.TT_WORD){
if(tok.sval.equalsIgnoreCase("exit"))
{
System.exit(1);
}
System.out.println(tok.sval);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 大小: 7.9 KB
分享到:
相关推荐
在编程竞赛中,POJ(Problemset Online Judge)是一个知名的在线判题系统,用于检验和提交程序解决问题的能力,而OI(OnlineJudge)是这类系统的统称。下面将对每个文件名中的题目和相关算法进行详细解释。 1. **P...
标题中的“我在poj的代码”指的是作者在POJ平台上完成的编程题目的源代码集合。 【描述】:“我在poj共做了175题,暂时传上来看看” 这句描述透露了作者在POJ平台上参与的编程练习数量,总计完成了175道题目。这...
【标题】"POJ.rar_poj java_poj1048" 涉及的知识点主要围绕编程竞赛中的“约瑟夫环”问题,这里是一个加强版,使用Java语言进行解决。 【描述】"POJ1048,加强版的约瑟夫问题 难度中等" 提示我们,这个问题是编程...
1. **字符串处理**:在C++中,处理字符串通常使用`std::string`类,可以进行字符串的创建、拼接、查找、比较等操作。在本题中,我们需要读取输入的字符串并进行分析。 2. **回文判断**:回文判断有多种方法。一种...
指针是C/C++语言中一个复杂的概念,书中从指针的基本概念开始,逐步解释了指针运算、空指针、指向指针的指针、指针和数组的关系以及指针和动态内存分配的注意事项。在结构体的章节中,讲解了结构的概念、如何定义和...
在解题报告中,作者可能会首先分析问题的输入和输出格式,然后讨论可能的解决方案。可能的策略包括预计算某些值、使用数据结构优化查找,或者利用特定的数学性质来减少计算量。在AC代码中,会看到这些策略是如何转化...
【标题】"POJ3273-Monthly Expense"是一个编程题目,源自北京大学的在线判题系统POJ(Problem Set of Peking University)。...此外,记得使用POJ提供的测试数据进行调试,并提交代码以获取自动评测结果。
标题中的"jihe.rar_2289_POJ 3714_poj3714_poj3714 Ra_visual c" 提到了一个压缩文件,可能包含有关编程竞赛或算法解决的资源,特别是与POJ(Problem On Judge)平台上的问题3714相关的。"Ra_visual c"可能指的是...
4. **输入/输出处理**:在POJ中,通常需要从标准输入读取数据,并将结果输出到标准输出。因此,理解C#中的Console.ReadLine()和Console.WriteLine()等输入输出方法是必要的。 5. **调试技巧**:因为代码已经...
该题目要求参赛者使用C++编程语言解决特定的问题,并且在解决方案中应用了STL(Standard Template Library)中的优先队列这一数据结构。 描述“北大POJ3253-POJ3253-Fence Repair【STL优先队列】解题报告+AC代码”...
在提供的文件“POJ2676-Sudoku.cpp”中,应该包含了上述算法的C++实现,而“POJ2676-Sudoku.doc”可能包含了解题思路、代码解释或者测试数据的分析。详细阅读这两个文件,可以帮助我们更深入地理解这个问题的解决...
总的来说,"POJ2305-Basic remains"是一个适合初学者练习基本编程技能和数学逻辑的题目,同时也能帮助他们掌握如何在实际编程环境中解决问题。通过解决此类问题,程序员可以提升自己的编程思维和调试能力。
**拓扑排序**的基本思想是:对于有向无环图G,如果存在一条从顶点u到顶点v的路径,那么在拓扑排序结果中,u一定出现在v之前。拓扑排序可以得到多个不同的合法序列,但每个顶点只会出现一次。一个典型的拓扑排序算法...
这些题目是针对ACM竞赛(ACM International Collegiate Programming Contest,简称ICPC)中的编程训练,POJ(Problem Set for Online Judges)是一个在线的编程竞赛平台,提供了许多算法和逻辑思维的练习题目。...
【标签】"POJ 1010 STAMPS"是问题的标识符,POJ系统中的每个题目都有一个唯一的编号,1010是这个问题在系统中的ID,"STAMPS"可能是题目涉及的主题或关键词,可能与邮票、收集或组合优化有关。 【压缩包子文件的文件...
在这个文件中,程序员可能使用了标准库中的数据结构和算法,如数组、指针、循环、条件语句等,来解决问题。 2. "POJ3122-Pie.doc":这可能是解题报告的文档,通常使用Microsoft Word或其他文档编辑软件创建。报告中...
2. **输入/输出处理**:在C++中,通常使用cin/cout或scanf/printf进行输入输出,需要理解如何正确读取和处理题目给出的输入格式。 3. **字符串操作**:题目可能涉及到字符串的处理,如分割、比较、查找子串等。 4....
在这个压缩包中,很可能包含了用户在POJ上参与编程挑战时编写的源代码。 描述提到“我的一些pojac代码”,这表明文件包含的是用户个人编写的一些代码片段,可能是为了解决POJ上的特定问题。虽然用户提到代码不多,...
【描述】"POJ1027的官方测试数据"意味着这道题目涉及的具体内容需要通过查看题目详情来获取。通常,这些测试数据包括了多个输入案例,每个案例都有预期的输出结果,用来验证参赛者的程序是否能在各种情况下得到正确...
2. **比较运算**:找出数组中最接近整数的值,可能需要使用到比较运算符。 3. **绝对值计算**:计算数值与整数的差距,可能需要用到绝对值函数。 4. **循环和条件语句**:遍历数组并检查每个元素是否为“圆整数”。 ...