51鸽了几天,有几场比赛的题解还没发布,今天晚上会补上的
1520A. Do Not Be Distracted!
问题分析
模拟,如果存在已经出现的连续字母段则输出NO
using ll = long long;void solve() {int n;string s;cin n s;bool vis[30] = {false};for (int i = 0; i n; ++i) {if (vis[s[i] - 'A']) {cout NOn;return;}int j = i;while (s[j] == s[i]) j++;vis[s[i] - 'A'] = true;i = j;}cout YESn;}
1520B. Ordinary Numbers
using ll = long long;bool check(int x) {string temp = to_string(x);for (int i = 0; i temp.size() - 1; i++)if (temp[i] != temp[i + 1]) return false;return true;}ll ans;void solve() {ll n;cin n, ans = 0;int k = 1, temp = 1;for (int i = temp; i = n; i += temp) {if (check(i)) ans++;else {temp = temp 10 + 1;i = 0;}}cout ans endl;}
1520C. Not Adjacent Matrix
问题分析:构造思想
,无论怎么构造矩阵都会产生相邻的矩阵。
其他情况,以 为起点每次间隔 + 2,因为 数值不超过
所以,在大于此值时再从
开始枚举,这样一定能填充整个
矩阵
void solve() {int n;cin n;vectorint a(100 100 + 10);if (n == 2) {cout -1 n;return;}int cnt = 1;for (int i = 1; i = n n; ++i) {if (cnt = n n) a[i] = cnt, cnt += 2;if (cnt n n) cnt = 2;}for (int i = 1; i = n n; ++i) {cout a[i];if (i % n == 0) cout n;elsecout ;}}
1520D. Same Differences
问题分析
变换公式,
所以我们可以存储 的值,然后进行组合数计算
,
代表
的个数
using ll = long long;void solve() {int n;mapint, ll mp;cin n;for (ll i = 1, x; i = n; ++i) {cin x;mp[x - i]++;}ll cnt = 0;for (auto p mp) cnt += p.second (p.second - 1) 2;cout cnt n;}
1520E. Arranging The Sheep
问题分析:贪心
对于绵羊序列,两端都往中间移动一定最优
void solve() {int n;string s;cin n s;vectorint a;int empty = 0;for (int i = 0; i n; ++i) {if (s[i] == '.') empty++;elsea.push_back(empty);}int mid = (a.size() - 1) 1;ll ans = 0;for (auto x a) ans += abs(x - a[mid]);cout ans n;}
1520F1. Guess the K-th Zero (Easy version)
待补
