java里面用boolean数组,100000100大小的boolean数组不超内存
找球号(二)
时间限制:
1000
ms | 内存限制:
65535
KB
难度:
5
-
描述
-
在某一国度里流行着一种游戏。游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,还有一个空箱子,现在有两种动作:一种是"ADD",表示向空箱子里放m(0<m<=100)个球,另一种是"QUERY”,表示说出M(0<M<=100)个随机整数ki(0<=ki<=100000100),分别判断编号为ki 的球是否在这个空箱子中(存在为"YES",否则为"NO"),先答出者为胜。现在有一个人想玩玩这个游戏,但他又很懒。他希望你能帮助他取得胜利。
-
输入
-
第一行有一个整数n(0<n<=10000);
随后有n行;
每行可能出现如下的任意一种形式:
第一种:
一个字符串"ADD",接着是一个整数m,随后有m个i;
第二种:
一个字符串"QUERY”,接着是一个整数M,随后有M个ki;
输出
- 输出每次询问的结果"YES"或"NO". 样例输入
-
2 ADD 5 34 343 54 6 2 QUERY 4 34 54 33 66
样例输出
- YES
- YES
- NO
- NO
-
第一行有一个整数n(0<n<=10000);
#include<iostream>
#include<vector>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n,i,m,p,j,y;
char char1[5];
vector<int>x[10001];
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%s",char1);
scanf("%d",&m);
if(char1[0]=='A')
{
for(j=0;j<m;j++)
{
scanf("%d",&p);
x[p%10001].push_back(p);
}
}
else
{
for(j=0;j<m;j++)
{
int flag=0;
scanf("%d",&y);
for(int k=0;k< x[y%10001].size();k++)
{
if( x[y%10001][k]==y)
{ flag=1;printf("YES\n");break;}
}
if(flag==0)
printf("NO\n");
}
}
}
}
return 0;
}
java代码ac
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int time = scanner.nextInt();
boolean result[]=new boolean[100000100];
Arrays.fill(result, false);
while (time-- != 0) {
String string=scanner.next();
if(string.charAt(0)=='A')
{
int number=scanner.nextInt();
for(int i=0;i<number;i++)
{
int x=scanner.nextInt();
result[x]=true;
}
}
else {
int num=scanner.nextInt();
while(num--!=0)
{
int y=scanner.nextInt();
if(result[y])
System.out.println("YES");
else {
System.out.println("NO");
}
}
}
}
}
}
}
java用vector不过代码,在找原因
import java.util.Scanner;
import java.util.Vector;
class result
{
Vector<Integer> vector=new Vector<Integer>();
}
public class Main {
static result results[];
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
results=new result[1005];
for(int i=0;i<1005;i++)
results[i]=new result();
int time = scanner.nextInt();
while (time--!=0) {
String string = scanner.next();
int number = scanner.nextInt();
if (string.charAt(0) == 'A') {
for (int i = 0; i < number; i++) {
int x = scanner.nextInt();
results[x%1001].vector.add(x);
}
} else {
for (int j = 0; j < number; j++) {
int y = scanner.nextInt();
if(results[y%1001].vector.isEmpty()==true)
System.out.println("NO");
else{
int flag = 1;
for(int i=0;i<results[y%1001].vector.size();i++)
{
if(results[y%1001].vector.get(i)==y)
{
System.out.println("YES");
flag=0;break;
}
}
if (flag == 1)
System.out.println("NO");
}
}
}
}
}
}