题目描述
这道题做的磕磕碰碰,好歹最后还是做出来了。
java数据录入问题
超时的时候, 一开始以为是java的Scanner类录入慢的问题,在网上查阅资料发现java的scanner类读数据的确是很慢的,刷OJ的最好使用BufferedReader (缓冲区)
示例:
class Reader {
static StringTokenizer token =new StringTokenizer("");
static BufferedReader reader =new BufferedReader (new InputStreamReader(System.in)) ;
static String nextLine() throws IOException {
return reader.readLine() ;
}
static String next() throws IOException {
while(!token.hasMoreTokens()) {
token =new StringTokenizer(reader.readLine()) ;
}
return token.nextToken() ;
}
static int nextInt() throws IOException {
return Integer.parseInt(next()) ;
}
static double nextDouble() throws IOException {
return Double.parseDouble(next()) ;
}
}
参考链接
StringTokenizer
是一个用来分隔字符串的类
构造函数:
-
StringTokenizer(String str)
构造一个用来解析 str 的 StringTokenizer 对象。java 默认的分隔符是空格("")、制表符(\t)、换行符(\n)、回车符(\r) -
StringTokenizer(String str,String delim)
构造一个用来解析 str 的 StringTokenizer 对象,并提供一个指定的分隔符。 -
StringTokenizer(String str, String delim,boolean ,returnDelims)
常用方法:
boolean hasMoreTokens()
判断是否还有分隔符
String nextToken()
返回当前位置到下一个分隔符的字符串
java整型数组能开多大
一开始想用暴力法,开了一个数组装第一个向量:
int a[]=new int[n+1] ;
对于前3组测试用例,n小于5*10^5次方都是可以的,最后一组就会报错,所以就只能得60分,其实java对整型数组的长度是有范围的,太大的会超出内存分配的空间。 我在本地跑了一下,确实报错了。
ac代码
解决了运行超时问题和运行错误问题,就好做了。
import java.io.*;
import java.util.*;
class Reader {
static StringTokenizer token =new StringTokenizer("");
static BufferedReader reader =new BufferedReader (new InputStreamReader(System.in)) ;
static String nextLine() throws IOException {
return reader.readLine() ;
}
static String next() throws IOException {
while(!token.hasMoreTokens()) {
token =new StringTokenizer(reader.readLine()) ;
}
return token.nextToken() ;
}
static int nextInt() throws IOException {
return Integer.parseInt(next()) ;
}
static double nextDouble() throws IOException {
return Double.parseDouble(next()) ;
}
}
public class Main {
public static void main(String[] args) throws IOException {
int n = Reader.nextInt() ;
int a = Reader.nextInt() ;
int b = Reader.nextInt() ;
HashMap<Integer,Integer> arr=new HashMap<> () ;
for(int i=0;i<a;i++) {
int index= Reader.nextInt() ;
int num=Reader.nextInt() ;
arr.put(index,num) ;
}
long res=0L ;
for(int i=0;i<b;i++) {
int index= Reader.nextInt() ;
int num=Reader.nextInt() ;
if(num!=0 && arr.containsKey(index) ) {
res += num* arr.get(index) ;
}
}
System.out.println(res) ;
}
}