希望这篇题解对你有用,麻烦动动手指点点关注或者赞,感谢您的关注!
前言:在竞赛中,会出现读入数据比较大的情况,如果用普通的输入输出会容易TLE
。
特别是Java
这种读入输出比较慢的,我们非常需要用到快读快写来进行数据的输入和输出。
那么常见快读快写有哪些呢?一起来看看吧!
快读快写
import java.io.*;
//先导入io包
public class Main{
public static void main(String []args) throws IOException {
//这里抛出IO异常
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw=new PrintWriter(new OutputStreamWriter(System.out));
String s[]=bf.readLine().split(" ");
//先读入字符串注意常用的输入案例会分割掉空格
int n= Integer.parseInt(s[0]);
int m=Integer.parseInt(s[1]);
//读入的是字符存在字符串数组中
//字符转为整形变量
String str[]=bf.readLine().split(" ");
int a[]=new int [n];
for(int i=1;i<=n;i++) {
a[i]=Integer.parseInt(str[i-1]);
//注意这里下标从1开始
//而字符串数组str默认下标从0开始,需要减一。
//具体情况视题目而定
}
long res=0;
for(int i=0;i<n;i++) {
a[i]=Integer.parseInt(str[i]);
//注意这里下标从0开始
res+=a[i];
}
pw.println(res);
//pw.write((int) res);
//快写二者选其一即可,通常是用的println。
//write有些类型输出会乱码
pw.flush();
//快写后记得刷新
}
}
快读快写(class Read)
上面的读入用while循环读入多个数据时经常会报错
如下:
while(m-->0){
int m=Integer.parseInt(bf.readLine());
}
while(m-->0){
String s[]=bf.readLine().split(" ");
int a=Integer.parseInt(s[0]);
}
这里提供另一种读写方法,直接写一个读类。
class Read{
StreamTokenizer st=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
public int nextInt() throws IOException {
// TODO Auto-generated method stub
st.nextToken();
return (int)st.nval;
}
}
那怎么用该读类?
其实定义好读类后,在main()
中声明后,直接像sc.nextInt()
常规操作即可,很方便。
下面让我们来看一下怎么用?
直接上题:
P2249 【深基13.例1】查找
Accode
import java.io.*;
import java.util.*;
public class Main{
static int a[];
public static void main(String []args) throws IOException{
Read sc=new Read();
int n=sc.nextInt();
int m=sc.nextInt();
a=new int[n];
for(int i=0;i<n;i++){
a[i]=sc.nextInt();
}
while(m-->0){
int x=sc.nextInt();
int l=0,r=n-1;
while(l<r){
int mid=l+r>>1;
if(a[mid]>=x)r=mid;
else l=mid+1;
}
if(a[l]==x)System.out.print(l+1+" ");
else System.out.print(-1+" ");
}
}
}
class Read{
StreamTokenizer st=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
public int nextInt() throws IOException {
// TODO Auto-generated method stub
st.nextToken();
return (int)st.nval;
}
}
如有错漏,请指正!
欢迎大家收藏,持续更新中!