好博览而不守章句。
文章目录
- 田忌赛马
- 正/邪
- 复读姬
田忌赛马
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{vector<int> v(4),a(4);cin >> v[1] >> v[2] >> v[3] >> a[1] >> a[2] >> a[3];int cnt=0;for(int i=1;i<=3;++i){for(int j=1;j<=3;++j){if(a[j] > v[i]) cnt++,a[j]=0;}}if(cnt >= 2) cout << "Yes";else cout << "No";
}
正/邪
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{string s;int n;cin >> n >> s;int pos1 = s.find("n");int pos2 = s.find("n",pos1+1);while(pos1 != -1 && pos2 != -1){if(pos1-pos2<2) s = s.substr(0,pos1) + "y" + s.substr(pos1,pos2-pos1);pos1 = s.find("n",pos2+1);pos2 = s.find("n",pos1+1);}int l = s.size(),cnt=0;for(int i=0;i<l;++i) if(s[i]=='y') cnt++;cout << cnt;
}
复读姬
代码如下:
#include <bits/stdc++.h>
using namespace std;class mp {
public:int count; // 该消息连续出现的次数string value; // 消息内容
};int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); //解绑定加快输入输出int n;string tmp;cin >> n;vector<mp> mps; // 存储合并后的消息分组cin >> tmp;mps.push_back({1, tmp}); // 初始化第一个分组// 合并连续相同的消息for (int i = 1; i < n; ++i){cin >> tmp;if (mps.back().value == tmp) mps.back().count++; // 如果字符串练习出现else {mps.push_back({1, tmp}); // 创建新分组继续统计连续出现}}int size = mps.size(),max_l = 0;// 情况1:不撤回任何消息时的最大连续长度for (int i=0;i<size;++i) {max_l = max(max_l, mps[i].count);}// 情况2:尝试撤回一个分组,检查前后是否可以连接// 遍历所有可能被撤回的中间分组(至少前后都有分组)for (int i = 1; i < size-1; ++i) {// 当前分组必须是单个不同消息(count为1),且前后分组消息相同if (mps[i].count == 1 && mps[i-1].value == mps[i+1].value) {max_l = max(max_l, mps[i-1].count + mps[i+1].count);}}cout << max_l;return 0;
}