比赛链接
【CSP-J模拟赛六】--A简单数论
这个应该不用说什么了...
std::__gcd(a,b);
a/std::__gcd(a,b)*b;
【CSP-J模拟赛六】--B隐藏的电话号码
队列+BFS
【CSP-J模拟赛六】--C优美的灯
80分......
不知道该怎样描述,直接放代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
char a;
cin >> a;
char b = a;
vector<int> s;
int m = 0;
for (int i = 1; i < n; i++) {
cin >> a;
if (a == b)m++;
else {
b = a;
s.push_back(m + 1);
m = 0;
}
}
s.push_back(m + 1);
for (int i = 0; i < k; i++) {
int maxn = INT_MIN, maxx = 0;
int len = s.size();
for (int j = 0; j < len; j++) {
if (s[j] > maxn)maxn = s[j], maxx = j;
}
s[maxx] = ceil(maxn * 1.0 / 2) - 1;
s.insert(s.begin() + maxx + 1, 1, 1);
s.insert(s.begin() + maxx + 2, 1, floor(maxn * 1.0 / 2));
}
int maxn = INT_MIN;
for (int num: s) {
if (num > maxn)maxn = num;
}
cout << maxn;
return 0;
}
【CSP-J模拟赛六】--D承接工程
单调递增栈
代码很好写,主要是原理
不压行22行AC
【CSP-J模拟赛六】--E美丽的序列
核心思路
确定左半长度:根据n的奇偶性,左半长度m为(n+1)/2
(奇)或n/2
(偶)。
候选k生成:
左半部分:对于每个位置i(0 ≤ i < m),k的可能值为a[i] - i
(需≥1)。
右半部分:对于每个位置j(m ≤ j < n),对应的左半位置为n-1-j
,k的可能值为a[j] - (n-1-j)
(需≥1)。
补充候选:确保k=1
作为基础候选。
遍历候选k:对每个候选k,计算构造回文序列与原序列的差异数,取最小值。
未完待续欢迎投稿