Submit solution
Points:
1.00 (partial)
Time limit:
1.0s
Memory limit:
256M
Author:
Problem type
Allowed languages
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift
Viết chương trình nhập ma trận các số nguyên ~A~ có ~m~ dòng và ~n~ cột từ bàn phím. Hãy tìm và liệt kê các số chính phương có trong ma trận ~A~ theo thứ tự tăng dần và mỗi số chính phương đó chỉ liệt kê 1 lần (bỏ qua nếu đã liệt kê)
Input
- Dòng đầu tiên là 2 số nguyên dương ~m~, ~n~
- ~m~ dòng tiếp theo, mỗi dòng là ~n~ số nguyên tương ứng là các phần tử trên hàng tương ứng của ma trận ~A~
Giới hạn
- ~2 \le m, n \le 100~
- ~|A_{ij}| \le 10000~
Output
- Danh sách các số chính phương có trong ma trận theo thứ tự tăng dần & không có trùng lặp. Mỗi số cách nhau bởi 1 dấu cách.
- Nếu không có số chính phương nào trong ma trận ~A~, in ra
NOT FOUND
Sample
Input #1
3 4
7 8 9 5
4 5 6 7
8 2 3 4
Output #1
4 9
Comments
int dem[10000001]; bool check(long long n) { if (n < 1) return false; long long tam = sqrt(n); if(tam*tam == n){ return true; } else return false; }
int main() { int n, m; cin >> n >> m; long long A[n][m]; vector<long long> B; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> A[i][j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (check(A[i][j])&&dem[A[i][j]]==0){ B.pushback(A[i][j]); dem[A[i][j]]=1; } } } if (B.empty()) { cout << "NOT FOUND"; } else { sort(B.begin(), B.end()); for (sizet i = 0; i < B.size(); i++) { cout << B[i] << " "; } } }
dung ham kiem tra scp r duyet qua tung phan tu,neu co them 1 phan tu la scp thi tang bien kiem tra len 1 dv sau thoat khoi vong lap thi kiem tra xem bien cua minh van giu nguyen gia tri hay da thay doi
O(n^2) anh em
define ll long long
include<bits/stdc++.h>
using namespace std; void input(ll a[][100],ll n,ll m){ for(ll i=0;i<n;i++){ for(ll j=0;j<m;j++){ cin>>a[i][j]; } } } int main (){ iosbase::syncwith_stdio(0);cin.tie(0);cout.tie(0); ll n,m,a[100][100]; cin>>n>>m; input(a,n,m);
bool test = false; const int MAXVAL = 1e6; vector<bool> marked(MAXVAL + 1, false); vector<int> s; for(ll i=0;i<n;i++){ for(ll j=0;j<m;j++){ ll check=sqrt(a[i][j]); if(check*check==a[i][j]&&!marked[a[i][j]]){ s.push_back(a[i][j]); marked[a[i][j]] = true; test = true; } else { false; } } }
}
anh em lưu ý số 1 cũng là số chính phương nhé =))
co truong hop la so am anh em chu y
test cuoi la trong A khong co so chinh phuong
cho vào set thôi