Thắc mắc về kiểu dữ liệu

Đề: https://codeforces.com/edu/course/2/lesson/9/1/practice/contest/307092/problem/C

#include <iostream>
#include <vector>
#include <map>
using namespace std; 
int main () { 
   int n; 
   int m; 
   cin >> n >> m; 
   vector <int> a (n); 
   vector <int> b (m);
   map  <int, long long> resa; 
   map <int, long long> resb; 
   for (int i = 0; i < n;i++) {
   	 cin >> a[i]; 
   	 resa [a[i]]++; 
   }
   for (int i = 0; i < m;i++) { 
        cin >> b[i];
		resb [b[i]]++; 
   }
   vector <int> c; 
   map <int,bool> resc;
   for (int i = 0; i < n;i++) { 
       if (!resc[a[i]]) {                         
       	  c.push_back(a[i]); 
       	  resc[a[i]] = true; 
	   } 
   }
   long long ans = 0; 
   for (long long i = 0;i < c.size();i++) { 
       ans+= resa[c[i]] * resb [c[i]]; 
   }
   cout << ans; 
}

Ở dòng này cho em hỏi tại sao em phải dùng long long thì mới ACcept trong khi đề bảo chỉ cần 10 mũ 5 mà tối đa là 10^5 * 10^5 = 10^10 thì đã có cái biến long long ans giải quyết.

  map  <int, long long> resa; 
   map <int, long long> resb; 

Mọi người giải thích cho em với, em cảm ơn nhiều ạ. :smiley:

Bạn có thể chép đề luôn được không? Liên kết trên không truy xuất được.

1 Like

Phải có ít nhất 1 toán hạng là long long thì phép nhân mới ra kết quả long long, bằng không sẽ toàn là int. Số thực cũng tương tự.

4 Likes

Wow, hay thật, em cảm ơn.

Dạ đây ạ

Non-decreasing thì làm kiểu trộn mảng ấy, nhưng track thêm ==.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?