网易互娱人工智能第一批机器学习算法工程师3道编程
1. T个测试用例。用例中,给定 n 个非负整数,按每个数的二进制表示中‘1‘的个数进行分组,求这 n 个数分成几组?
#include <iostream> #include <unordered_set> using namespace std; int func(int x){ int c = 0; while(x){ c++; x &= x - 1; } return c; } int main() { int T, n; cin >> T; for(int t = 1; t <= T; ++t){ cin >> n; unordered_set<int> s; for(int i = 0; i < n; ++i){ int x; cin >> x; s.insert(func(x)); } cout << s.size() << endl; } return 0; }2. T 个测试用例。每个测试用例,输入 m, t, m1, t1, m2, t2 六个整数。m 是游泳池容量,进水管每分钟进水量为 m1,出水管每分钟出水量为 m2。
进水管每隔 t1 分钟切换状态(“进水”、“关闭”互相切换),出水管每隔 t2 分钟切换一次状态(“出水”、“关闭”互相切换)。初始时,进水管、出水管都是开启状态。
求 t 时刻游泳池里的水量。
游泳池水量不会溢出,水量也不会为负。
#include <iostream> using namespace std; int main() { int T, m, m1, m2, t1, t2, t; cin >> T; for(int i = 1; i <= T; ++i) { cin >> m >> t >> m1 >> t1 >> m2 >> t2; int volume = 0; for(int j = 1; j <= t; ++j) { int t11 = j / t1 * t1; // 1: in, 0 stop bool state1 = (j / t1 % 2 && j == t11) || (!(j / t1 % 2) && j != t11); int t22 = j / t2 * t2; // 1: out, 0 stop bool state2 = (j / t2 % 2 && j == t22) || (!(j / t2 % 2) && j != t22); if(state1 && state2) { volume += m1 - m2; } else if(state1) { volume += m1; } else if(state2) { volume -= m2; } if(volume > m) { volume = m; } else if(volume < 0) { volume = 0; } } cout << volume << endl; } return 0; }
3. T个测试用例。每个测试用例,给定一个全部是大写字母组成的字符串,允许你至多可将两个字符改成字符'N',求更改后,由连续‘N’组成的串的最长长度。
#include <iostream> #include <string> using namespace std; int func(string s) { int s_size = s.size(); int count = 0, begin = 0, end = 0, len = 0; while(end < s_size) { if(s[end++] != 'N') count++; while(count > 2) { if(s[begin++] != 'N') { count--; } } len = max(len, end - begin); } return len; } int main() { int T; string s; cin >> T; for(int i = 1; i <= T; ++i) { cin >> s; cout << func(s) << endl; } return 0; }