Gửi bài giải
Điểm:
1,00 (OI)
Giới hạn thời gian:
1.0s
Java
4.0s
Giới hạn bộ nhớ:
256M
Input:
stdin
Output:
stdout
Tác giả:
Nguồn bài:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch
Cho mảng A[] gồm N phần tử, bạn hãy kiểm tra xem giá trị X có xuất hiện trong mảng không?
Gợi ý : Dùng mảng đánh dấu để mỗi test case chỉ mất O(1) thay vì tìm kiếm tuyến tính sẽ mất O(N)
Đầu vào
Dòng 1 là N : số phần tử trong mảng
Dòng 2 là N số trong mảng viết cách nhau 1 dấu cách
Dòng 3 là T : Số test case
T dòng tiếp theo mỗi dòng là số nguyên X
Giới hạn
1<=N<=10^6
0<=A[i]<=10^7
1<=T<=10^4
0<=X<=10^7
Đầu ra
Đối với mỗi test case in ra YES nếu X xuất hiện trong mảng, ngược lại in NO.
Ví dụ :
Input 01
9
2 41 21 28 27 3 49 22 2
5
3
27
15
15
19
Output 01
YES
YES
NO
NO
NO
Bình luận
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
bạn cho mình hỏi code này của mình sao lại TLE ạ?
include <stdio.h>
include <math.h>
int dem[1000001]; int ba(int a[],int n,int x){ int max=-1e9,cnt=0; for(int i=0;i<n;++i){ if(a[i]==x){ dem[a[i]]=1; if(a[i]>max){ max=a[i]; }
} int main(){ int n; scanf("%d",&n); int a[n]; for(int i=0;i<n;++i){ scanf("%d",&a[i]); } int t; scanf("%d",&t); int x; for(int i=1;i<=t;++i){ scanf("%d",&x); if(ba(a,n,x)){ printf("YES\n"); }else{ printf("NO\n"); } } }
Bạn có thể xem hoặc tìm hiểu thuật toán 'Mảng cộng dồn' nhé!
Theo như code của bạn thì bị quá thời gian do do sử dụng tìm kiếm tuyến tính(Duyệt từ 0 -> n - 1) => độ phức tạp tốn O(n)
Vì vậy mỗi testcase bạn phải duyệt ~10^6~ lần. Do vậy độ phức tạp của bạn là ~10^4~ * ~10^6~(Vượt qua mức an toàn là ~10^8~
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.