三道题比较简单直接贴代码吧
1. 判断异形词
int main() { string s1, s2; getline(cin, s1); getline(cin, s2); unordered_map<char, int> dict1, dict2; for (auto &a : s1) dict1[a]++; for (auto &a : s2) dict2[a]++; for (auto &a : dict1) { if (dict2.count(a.first) && dict2[a.first] == a.second) { dict2.erase(a.first); } else { cout << "0" << endl; return 0; } } if (dict2.size() == 0) cout << "1" << endl; else cout << "0" << endl; return 0; }
2. 给定数字,有多少种连续质数相加组成(考察:前缀和)
int main() { int num, counts = 0; cin >> num; vector<int> dict; vector<ll> sums; sums.push_back(0); for (int i = 2; i <= num; i++) { if (check(i)) { dict.push_back(i); sums.push_back(sums.back()+i); } } for (int i = 1; i < sums.size(); i++) { for (int j = 0; j < i; j++) { if (sums[i]-sums[j] == num) counts++; } } cout << counts << endl; return 0; }
3. 0-1背包(不压缩空间只能过40%)
int main() { int n, m; cin >> n >> m; vector<int>times, values; for (int i = 0; i < n; i++) { int a, b; cin >> a >> b; times.push_back(a); values.push_back(b); } vector<int> dp(m+1, 0); for (int i = 0; i < n; i++) { for (int j = m; j >= times[i]; j--) { dp[j] = max(dp[j], dp[j-times[i]]+values[i]); } } cout << dp[m] << endl; return 0; }
全部评论
(0) 回帖