首页 > 其他分享 >Educational Codeforces Round 163 A-E

Educational Codeforces Round 163 A-E

时间:2024-03-16 14:55:51浏览次数:15  
标签:Educational cin int begin long Codeforces using 163 define

A. Special Characters

构造

形如 \(A\) 和 \(B\) 这类单个字符构成的字符串对答案的贡献为 \(0\),而 \(AA\) 和 \(AAAA\) 这类多个相同字符构成的字符串对答案的贡献固定为 \(2\)​,则无法构造出奇数值,由第二类字符串拼接即可构造出偶数值。

时间复杂度:\(O(n)\) 。

#include <bits/stdc++.h>

using namespace std;

#define cctie ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define all(x) x.begin(), x.end()
#define ALL(x) x.begin() + 1, x.end()

using i64 = long long;

void solve() {
    int n;
    cin >> n;

    if (n & 1) {
        cout << "NO\n";
    } else {
        cout << "YES\n";
        string ans;
        for (int i = 0; i < n / 2; i++) {
            ans.push_back('A' + i);
            ans.push_back('A' + i);
        }

        cout << ans << '\n';
    }
}

void prework() {

}

int main() {
    cctie;

    prework();

    int T;
    cin >> T;

    while (T--) {
        solve();
    }

    return 0;
}  

B. Array Fix

枚举/贪心

枚举:能执行操作的一定是两位数,且该操作一定会使被操作数分裂成两个个位数,则当我们对第 \(i\) 个数执行操作后,前 \(i - 1\)​ 个数中的两位数也得执行操作(因为两位数一定大于个位数),即执行操作的数一定为其前缀,所以枚举操作的前缀,再判断是否非递减即可。

贪心:当第 \(i\) 个数能分裂且分裂后不影响前 \(i\) 个数的非递减性质,则分裂更优(为后面的数分裂留出空间)。

时间复杂度:枚举 \(O(n^2)\),贪心 \(O(n)\) 。

#include <bits/stdc++.h>

using namespace std;

#define cctie ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define all(x) x.begin(), x.end()
#define ALL(x) x.begin() + 1, x.end()

using i64 = long long;

void solve() {
    int n;
    cin >> n;

    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    bool ans = false;
    for (int i = 0; i <= n; i++) {
        vector<int> b;
        for (int j = 1; j <= n; j++) {
            if (j <= i && a[j] >= 10) {
                b.push_back(a[j] / 10);
                b.push_back(a[j] % 10);
            } else {
                b.push_back(a[j]);
            }
        }
        int m  = b.size();
        bool f = true;
        for (int i = 1; i < m; i++) {
            if (b[i] < b[i - 1]) {
                f = false;
            }
        }
        if (f) {
            ans = true;
        }
    }

    if (ans) {
        cout << "YES\n";
    } else {
        cout << "NO\n";
    }
}

void prework() {

}

int main() {
    cctie;

    prework();

    int T;
    cin >> T;

    while (T--) {
        solve();
    }

    return 0;
} 

C. Arrow Path

搜索

按题中的行动方式进行 \(bfs\) 即可。

时间复杂度:\(O(n)\) 。

#include <bits/stdc++.h>

using namespace std;

#define cctie ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define all(x) x.begin(), x.end()
#define ALL(x) x.begin() + 1, x.end()

using i64 = long long;

void solve() {
    int n;
    cin >> n;

    vector<vector<char>> a(3, vector<char>(n + 1));
    for (int i = 1; i <= 2; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> a[i][j];
        }
    }

    vector<vector<bool>> st(3, vector<bool>(n + 1));
    queue<array<int, 2>> q;
    q.push({1, 1});
    st[1][1] = true;
    vector<int> dx = {-1, 0, 0, 1}, dy = {0, 1, -1, 0};
    auto is_legal = [&](int x, int y)->bool {
        return 1 <= x && x <= 2 && 1 <= y && y <= n;
    };
    while (!q.empty()) {
        auto [x, y] = q.front();
        q.pop();
        for (int i = 0; i < 4; i++) {
            int nx = x + dx[i], ny = y + dy[i];
            if (is_legal(nx, ny)) {
                if (a[nx][ny] == '<') {
                    ny--;
                } else {
                    ny++;
                }
                if (!st[nx][ny]) {
                    st[nx][ny] = true;
                    q.push({nx, ny});
                }
            }
        }
    }

    if (st[2][n]) {
        cout << "YES\n";
    } else {
        cout << "NO\n";
    }
}

void prework() {

}

int main() {
    cctie;

    prework();

    int T;
    cin >> T;

    while (T--) {
        solve();
    }

    return 0;
}  

D. Tandem Repeats?

枚举/动态规划

枚举:考虑答案能否为 \(2k\),我们则要找一个子串 \(s[i...(i + k - 1)] = s[i+k...(i+2k-1)]\),构建一个新数组 \(b\),\(b[i]\) 表示 \(s[i]\) 是否等于 \(s[i + k]\),则要确定的是 \(b\) 数组中是否存在长度为 \(k\) 且和为 \(k\) 的子区间,这很容易 \(O(n)\) 解决,而 \(k\) 的取值为 \([0, {n\over2}]\),直接枚举即可。

动态规划:求后缀的最长公共前缀。

时间复杂度:\(O(n^2)\) 。

#include <bits/stdc++.h>

using namespace std;

#define cctie ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define all(x) x.begin(), x.end()
#define ALL(x) x.begin() + 1, x.end()

using i64 = long long;

void solve() {
	string s;
	cin >> s;

	int n = s.size(), ans = 0;
	for (int l = 1; l <= n / 2; l++) {
		int cnt = 0;
		for (int i = 0, j = 0; i + l < n; i++) {
			if (s[i] == s[i + l] || s[i] == '?' || s[i + l] == '?') {
				cnt++;
				if (cnt == l) {
					ans = l * 2;
					break;
				}
			} else {
				cnt = 0;
			}
		}
	}

	cout << ans << '\n';
}
 
void prework() {

}

int main() {
	cctie;

	prework();

	int T;
	cin >> T;

	while (T--) {
		solve();
	}

	return 0;
}

E. Clique Partition

贪心、构造

考虑每一个团皆由连续的点集所构成,因为这样能使 \(|i - j|\) 最小,打表能发现点的数量小于等于 \(k\) 的团能构造,而 \(k + 1\) 的团不行,所以每 \(k\) 个点构成一个团,剩余不足 \(k\) 个的点构成一个团,构造方法为先使每个点的值为其编号即 \(a_i = i\),再在每个团的前、后半部分各自翻转。这样构造前、后半部分各自内部两点间的值显然不会超过 \(k\),而前后半部分各选一点间的值最多为 \(k\) 。

时间复杂度:\(O(n)\) 。

#include <bits/stdc++.h>

using namespace std;

#define cctie ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define all(x) x.begin(), x.end()
#define ALL(x) x.begin() + 1, x.end()

using i64 = long long;

void solve() {
	int n, k;
	cin >> n >> k;

	int col = 0;
	vector<int> a(n + 1), c(n + 1);
	iota(ALL(a), 1);
	for (int i = 1; i <= n; i += k) {
		int j = min(i + k - 1, n), h = i + j >> 1;
		reverse(a.begin() + i, a.begin() + h + 1);
		reverse(a.begin() + h + 1, a.begin() + j + 1);
		fill(c.begin() + i, c.begin() + j + 1, ++col);
	}

	for (int i = 1; i <= n; i++) {
		cout << a[i] << " \n"[i == n];
	}
	cout << col << '\n';
	for (int i = 1; i <= n; i++) {
		cout << c[i] << " \n"[i == n];
	}
}
 
void prework() {

}

int main() {
	cctie;

	prework();

	int T;
	cin >> T;

	while (T--) {
		solve();
	}

	return 0;
}

标签:Educational,cin,int,begin,long,Codeforces,using,163,define
From: https://www.cnblogs.com/xiojoy/p/18077067

相关文章

  • Codeforces 1948E Clique Partition
    考虑到有\(|i-j|\),所以肯定是让相邻的一部分在一个团里。考虑构造出一个最长长度的,后面类似复制几遍即可。考虑到\(|k-1|=k-1\),且因为\(a_i\)为一个排列,差的绝对值至少为\(1\),所以只考虑两端最长长度也只可能为\(k\)。不妨先假设最长长度为\(k\)来构造。那么......
  • Codeforces-1005C
    https://codeforces.com/problemset/problem/1005/C一、代码目录#include<bits/stdc++.h>usingnamespacestd;voidsolve(){inta[122222],n,ans=0;map<int,int>m;scanf("%d",&n);for(inti=0;i<n;i++){......
  • Educational Codeforces Round 163 (Rated for Div. 2)
    EducationalCodeforcesRound163(RatedforDiv.2)A-SpecialCharacters解题思路:一个相同的连续段会贡献两个特殊字符,所以答案一定是偶数,找个不同的数分隔开即可。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll......
  • 稳定可靠:PW2163降压芯片,实现5V至3.3V/3V高效转换,3A电流稳定输出
    在现代电子设备中,电源管理芯片发挥着至关重要的作用。PW2163作为一款高效稳定的500kHz同步降压DC-DC转换器,凭借其出色的性能和广泛的应用领域,已成为众多电子设备中的电源管理新选择。 一、PW2163的显著特点与优势PW2163具有内部集成低RDS(ON)的主开关和同步开关,这一设计有助于最......
  • Codeforces Round 933 (Div. 3)赛后总结
    CodeforcesRound933(Div.3)B从边缘开始计算,因为边缘肯定只能一个一个减,就可以遍历得到答案.代码C只要对mapie特判,然后判断map和pie的个数就是答案了。D(记忆化搜索)可以通过二维数组来标记搜索状态,将已经出现过的状态直接返回,极大减少时间。#include<bits/stdc++.h>......
  • Codeforces Round 933 (Div. 3) A - G 题解
    CodeforcesRound933(Div.3)A-RudolfandtheTicketSolution因为\(n\)很小,直接枚举\(b_i+c_j\)所产生的所有数字Code#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn,m,k;cin>>n>>m>>k;intans=0;......
  • RedisCluster集群中的插槽为什么是16384个?
    RedisCluster集群中的插槽为什么是16384个?CRC16的算法原理。1.根据CRC16的标准选择初值CRCIn的值2.将数据的第一个字节与CRCIn高8位异或3.判断最高位,若该位为0左移一位,若为1左移一位再与多项式Hex码异或4.重复3至9位全部移位计算结束5.重复将所有输入数据操作完成以上步骤......
  • 谷歌破解 OpenAI 模型关键信息;微软更改默认浏览器,不再主推 Edge 丨 RTE 开发者日报 Vo
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • CodeForces 1874E Jellyfish and Hack
    洛谷传送门CF传送门显然\(\text{fun}(P)_{\max}=\frac{|P|(|P|+1)}{2}\)。考虑大力dp,设\(f_{i,j,k}\)为\(|P|=i\),\(P_1=j\),\(\text{fun}(P)=k\)的排列\(P\)的个数。此时\(|L|=j-1,|R|=i-j\)。转移枚举\(L_1,R_1,\text{fun}(L),\text{fun}(R......
  • Codeforces Round 933 (Div. 3)
    CodeforcesRound933(Div.3)AA-RudolfandtheTicket暴力查看代码voidsolve(){intn,m,k;cin>>n>>m>>k;vector<int>b(n),c(m);for(inti=0;i<n;++i)cin>>b[i];for(inti=0;i<m;++i)cin>>c[i];......