美团笔试题目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. 小美的数组操作

不会 = =。
科大讯飞公司氛围 434人发布