美团笔试题目2(2023-08-19)有点难 = =
1. 小美的外卖订单编号(AC)
#include <iostream> using namespace std; int main() { int q; cin >> q; int m, x; for (int i = 0; i < q; i++) { cin >> m >> x; int res = x % m; if (res == 0) { cout << m << endl; } else { cout << res << endl; } } return 0; } // 64 位输出请用 printf("%lld")
2. 小美的加法(AC)
#include <iostream> #include <vector> #include <iomanip> using namespace std; int main() { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; i++) { cin >> nums[i]; } unsigned long long res = 0; for (int i = 0; i < n; i++) { res += nums[i]; } long long maxAdd = 0; long long tmp; for (int i = 0; i < n - 1; i++) { tmp = (long long)nums[i] * nums[i + 1] - nums[i] - nums[i + 1]; if (tmp > maxAdd) { maxAdd = tmp; } } if (maxAdd > 0) { res += maxAdd; } cout << res; return 0; } // 64 位输出请用 printf("%lld")
3. 小美的01串翻转
#include <iostream> #include <string> #include <vector> using namespace std; int main() { string str; cin >> str; vector<bool> isChange(str.size()); int numChange = 0; for (int i = 1; i < str.size(); i++) { if (str[i] == str[i - 1]) { str[i] = str[i] == '0' ? '1' : '0'; isChange[i] = true; numChange++; } } if (numChange > str.size() / 2) { numChange = str.size() - numChange; for (int i = 0; i < isChange.size(); i++) { isChange[i] = isChange[i] == 1 ? 0 : 1; } } vector<int> dp(str.size()); int res = 0; //for (int len = 2; len <= str.size(); len++) { // dp[len-2] = isChange[i] == true ? 1 : 0; // for (int i = 0; i <= str.size() - len; i++) { // dp[i + len - 1] = dp[i + len - 2] + isChange[i + len - 1] == true ? 1 : 0; // res += dp[i + len - 1]; // } //} for (int i = 0; i < str.size() - 1; i++) { dp[i] = isChange[i] == true ? 1 : 0; for (int len = 2; len <= str.size() - i; len++) { dp[i + len - 1] = dp[i + len - 2] + isChange[i + len - 1] == true ? 1 : 0; res += dp[i + len - 1]; } } cout << res; return 0; } // 64 位输出请用 printf("%lld")
4. 小美的数组构造
#include <iostream> #include <vector> using namespace std; void dfs(unsigned long long& res, int sum, vector<int>& numsa, vector<int>& numsb) { if (numsb.size() == numsa.size()) { if (sum == 0) { res += 1; if (res > 1000000007) { res = res % 1000000007; } } return; } //if (numsb.size() == numsa.size() - 1) { // if (sum == numsa[numsb.size()]) { // return; // } // else { // numsb.push_back(sum); // dfs(res, sum - sum, numsa, numsb); // numsb.pop_back(); // } //} for (int i = 1; i <= sum - (numsa.size() - (numsb.size() + 1)); i++) { if (i == numsa[numsb.size()]) { continue; } else { numsb.push_back(i); dfs(res, sum - i, numsa, numsb); numsb.pop_back(); } } return; } int main() { int n; cin >> n; vector<int> numsa(n); int sum = 0; for (int i = 0; i < n; i++) { cin >> numsa[i]; sum += numsa[i]; } unsigned long long res = 0; vector<int> numsb; dfs(res, sum, numsa, numsb); cout << res; } // 64 位输出请用 printf("%lld")
5. 小美的数组操作
不会 = =。