深信服笔试 9.17 两个题 (ac和0.6)
//AC的版本 , 思路:统计所有数字出现的次数,奇数次数的就说明少的 #include "bits/stdc++.h" using namespace std; int a[20008]; int main(){ int i,j,n,m; cin>>n; m = 2*n*n - n; unordered_map<int ,int> map; vector<int>res; for(i =0;i < m;i++){ cin>>a[i]; //cout<<a[i]<<endl; map[a[i]]++; } for(auto i:map){ if(i.second %2 == 1){ //cout<<i.first<<" "; res.push_back(i.first); } } sort(res.begin(),res.end()); for(i =0;i< res.size();i++) cout<<res[i]<<" "; cout<<endl; return 0; } /* input 3 3 8 12 9 13 20 3 6 9 8 10 13 12 17 20 6 10 17 */ //两个版本 都是 0.6 完全暴力不行 #include "bits/stdc++.h" using namespace std; const int MAXN = 10020; int fluen[MAXN]; int a[MAXN]; int f[MAXN]; int main(){ int i,j,n,m,k; cin>>n>>m; memset(f,0,sizeof(f)); for(i = 0;i < MAXN;i++) fluen[i] = 0; for(i=0;i<n;i++){ cin>>a[i]; } //fluen[1] = 1; for(i = 0; i<n; i++){ k = sqrt(a[i]); for(j = 1;j <= k; j++){ if(a[i] % j == 0){ fluen[j] = 1; fluen[a[i]/j] = 1; } } } f[0]= 0; for(i =1;i<=10000;i++){ if(fluen[i]) f[i] = f[i-1] + 1; else f[i] = f[i-1]; } for(i =0;i<m;i++){ cin>>j>>k; cout<<f[k] - f[j -1]<<endl; } return 0; } /* input 3 1 8 9 20 1 5 output 5 */
#笔试题目##深信服#