标签:循环 cin order using mes for col 好用 ...
题目如下:
1 #include<iostream> 2 #include<set> 3 using namespace std; 4 5 int n, k, a[100000]; 6 set<pair<int, int>> mypairs; 7 8 int main() 9 { 10 cin >> n >> k; 11 for(int i = 0; i < n; i ++) 12 cin >> a[i]; 13 for(int i = 0; i < n; i ++) 14 { 15 for(int j = 0; j < n; j ++) 16 { 17 if(a[i] + k == a[j]) 18 mypairs.insert(make_pair(a[i], a[j])); 19 } 20 } 21 cout << mypairs.size() << endl; 22 return 0; 23 }
通过使用哈希表进行枚举优化
优化后的思路:
1 #include<iostream> 2 #include<unordered_set> 3 using namespace std; 4 5 int n, k, x, ans = 0; 6 unordered_set<int> myset; 7 8 int main() 9 { 10 cin >> n >> k; 11 12 for(int i = 0; i < n; i ++) 13 { 14 cin >> x; 15 myset.insert(x); 16 } 17 for(int x : myset) 18 { 19 if(myset.find(x+k) != myset.end()) 20 ans ++; 21 } 22 cout << ans << endl; 23 return 0; 24 }
或者:(编译器不支持C++11标准的代码)
1 #include<iostream> 2 #include<set> 3 using namespace std; 4 5 int n, k, x, ans = 0; 6 set<int> myset; 7 8 int main() 9 { 10 cin >> n >> k; 11 12 for(int i = 0; i < n; i ++) 13 { 14 cin >> x; 15 myset.insert(x); 16 } 17 for(set<int> ::iterator i = myset.begin(); i != myset.end(); i ++) 18 { 19 if(myset.find((*i)+k) != myset.end()) 20 ans ++; 21 } 22 cout << ans << endl; 23 return 0; 24 }
2018今日头条春招的一道笔试题 —— 通过改变枚举的变量进行枚举优化
标签:循环 cin order using mes for col 好用 ...
原文地址:https://www.cnblogs.com/Tuple-Joe/p/9168240.html