9.14百度笔试 c++开发岗位(求ac大佬指教)
1、大胃王
2、奇数偶数问题
1、代码
#include <bits/stdc++.h> using namespace std; int fun() { int T; cin >> T; int n, k; while (T--) { cin >> k >> n; vector<int> w(k); for (int i = 0; i < k; ++i) { cin >> w[i]; } if (accumulate(w.begin(), w.end(), 0) < n) { cout << -1 << endl; return 0; } vector<vector<int>> dp(n + 1); for (int i = 0; i < k; ++i) { int weight = w[i]; for (int j = n; j > 0; --j) { if (j <= weight) { if (dp[j].size() == 0 || dp[j].size()>1) dp[j] = { i + 1 }; } else { if (dp[j - weight].size() > 0) { if (dp[j].size() == 0) { dp[j] = dp[j - weight]; dp[j].push_back(i + 1); } else { if (dp[j - weight].size() < dp[j].size() - 1) { dp[j] = dp[j - weight]; dp[j].push_back(i + 1); } } } } } } if (dp[n].size() > 0) { cout << dp[n].size() << endl; for (int& i : dp[n])cout << i << ' '; cout << endl; } else { cout << -1 << endl; } } return 0; } int main() { fun(); }2、代码
using namespace std; int mod = 1e9 + 7; int main() { int n, m; cin >> n >> m; vector<int> v(n); for (int i = 0; i < n; ++i) { cin >> v[i]; v[i] %= 2; } vector<int> res; while (m--) { int tag, left, right; cin >> tag >> left >> right; --left; int length = right - left; int b = accumulate(v.begin() + left, v.begin() + right, 0); int t = 2; /*if (tag == 1) cout << long(pow(t, b) - 1)%mod << endl; else cout << long(pow(t, length) - pow(t, b)) % mod << endl;*/ if (tag == 1) res.push_back(long(pow(t, b) - 1) % mod); else res.push_back(long(pow(t, length) - pow(t, b)) % mod); } for (int &i : res) { cout << i << endl; } }
全部评论
(1) 回帖