第一题:
#include <iostream> #include <vector> #include <cmath> using namespace std; int main() { long long A, B, M; cin >> A >> B >> M; vector<long long> num(50005, 0); num[0] = 1; num[1] = 1; int tmp_max = 1; int n; cin >> n; while (n--) { int q; cin >> q; for (int i = tmp_max; i < q; i++) { num[i + 1] = (A * num[i] + B * num[i - 1]) % M; } tmp_max = max(tmp_max, q); cout << num[q] << " "; } return 0; }
第二题:
#include <iostream> #include <vector> #include <cmath> using namespace std; int main() { int n, k; cin >> n >> k; vector<int> num(n); int tmp_min = 0; for (int i = 0; i < n; i++) { cin >> num[i]; tmp_min = max(num[i], tmp_min); } if (k == 1) { cout << max(num[0], num[n - 1]) << endl; } else { cout << tmp_min << endl; } return 0; }
第三题:
#include <iostream> #include <vector> #include <cmath> #include <set> using namespace std; int main() { int T; cin >> T; while (T--) { int n; cin >> n; vector<set<int>> totol_bag; vector<int> count_ball(n, 0); set<int> all_color; bool res = true; for (int i = 0; i < n; i++) { cin >> count_ball[i]; // 一个袋子中球的颜色 set<int> ball; for (int j = 0; j < count_ball[i]; j++) { int color; cin >> color; ball.insert(color); all_color.insert(color); } totol_bag.push_back(ball); // 1.判断两两是否相同 if (count_ball[i] != ball.size()) res = false; } // 2.判断袋子中球的数目是否相同 if (res) { for (int i = 1; i < n; i++) { if (count_ball[i] != count_ball[i - 1]) { res = false; break; } } } // 3.判断每一种颜色在袋子中的数量 vector<int> diff_color; if (res) { for (auto color = all_color.begin(); res && color != all_color.end(); color++) { int times = 0; for (int i = 0; i < n; i++) { if (totol_bag[i].find(*color) != totol_bag[i].end()) { times++; } } if (times == n) { diff_color.push_back(*color); } else if (times != 1) { res = false; } } } if (res == false) { cout << "No" << endl; } else { cout << "Yes"; if (diff_color.size() != 0) { for (auto i : diff_color) { cout << " " << i; } } cout << endl; } } return 0; }
待会发第二题的证明
#小红书信息集散地##实习##小红书笔试#