Codeforces Round 963 (Div. 2)
A 题意:字符串中计数每个字符 A, B, C, 和 D,但每个字符的计数不超过 x。 123456789101112131415161718192021222324252627282930313233343536373839#include <iostream>#include <string>using namespace std;typedef long long LL;void solve() { int x; cin >> x; string s; cin >> s; int countA = 0, countB = 0, countC = 0, countD = 0; for (char c : s) { if (c == 'A' && countA < x) { countA++; } else if (c == 'B'...
阅读笔记2024
平行世界2024-7 —— 2024-8,由于是第一次写,故只记录了后两章。 夏娲回归 火:人类到底是何时使用火的呢,据考古说法,在一百万年前的非洲,古人类在自然中发现了火,并尝试利用火种烹饪食物。随着时代发展,用火冶炼金属成为文明发展的一大进步。进入到工业时代,火被用于驱动机器,从蒸汽机到内燃机,极大促进了人类生产力的提升。到了现今21世纪,火似乎慢慢疏远我们,各种电器取代了火的位置,我们好似失去了这团火吗?我想,火也许就像神话中的神明那样,默默守护着我们,人类只是匆匆过客,得与借助火得力量腾飞。 ...
基础算法
算法数据输入>1000000时使用scanf,否则使用cin。 排序 排序算法 平均时间复杂度 冒泡排序 O(n2) 选择排序 O(n2) 插入排序 O(n2) 希尔排序 O(n1.5) 快速排序 O(N*logN) 归并排序 O(N*logN) 堆排序 O(N*logN) 基数排序 O(d(n+r)) 快速排序——分治 确定分界点 调整区间 递归处理左右两端 12345678910111213141516171819202122232425262728293031323334353637#include <iostream>using namespace std;const int N = 1e6 + 10;int n;int q[N];void quick_sort(int q[], int l, int r){ if(l >= r) return; //int x = [q(l + r +1) / 2], i = l - 1, j = r + 1; ...
数学知识
数学知识算数基本定理任何大于 1 的整数是质数或独一无二的质数乘积(不理次序)。 任何一个大于1的自然数n都可以表示为素数的乘积形式: [ n = p_1^{e_1} \cdot p_2^{e_2} \cdot \ldots \cdot p_k^{e_k} ]$$。其中,$$(p_1, p_2, \ldots, p_k) $$是素数,$$(e_1, e_2, \ldots, e_k) $$是大于等于1的整数,并且这种分解方式是唯一的。 ### 质数 在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数,或者叫素数。 #### AcWing 866. 试除法判定质数 质数的判定——试除法 O(sqrt(n)) 由于约数是成对出现的,所以n的最大约数只能是$$\sqrt{n}$$ 12345678910111213141516171819202122232425262728293031323334353637#include <iostream>#include <algorithm>const int N =...
Pinely Round 4 (Div. 1 + Div. 2)
A 题意:通过多次删除相邻的两个元素,最终剩下的一个元素的最大可能值。由于数组的长度是奇数,最终总会剩下一个元素。求剩余元素的最大值 可以发现一个数左右数的个数为偶数时,可以删除到只剩该元素,且左边为偶数,则右边为偶数,因此我们只需找出最大值的位置,判断其位置是否为奇数位。 是,则输出其 否,则置0,再次寻找最大数 12345678910111213141516171819202122232425262728293031323334353637383940414243#include <iostream>using namespace std;const int N = 105;int arr[N];void solve() { int num; cin >> num; int maxpos = 0; int maxnum = 0; for (int i = 0; i < num; i++) { cin >> arr[i]; if (arr[i] > maxnum)...
洛谷题单——数据结构0x2
P4715 【深基16.例1】淘汰赛 这题其实是二叉树左子树和右子树之间的比较,可以使用队列来不断求值,亦可以找出左右部分最大值,比较得出亚军。 题解 P4715 【深基16.例1】淘汰赛 - 洛谷专栏 (luogu.com.cn) 1234567891011121314151617181920212223242526272829303132333435363738394041424344#include <iostream>#include <queue>using namespace std;typedef long long LL;typedef pair<int, int> pii;queue<pii> que;void solve() { int n; cin >> n; n=1<<n; // n<<=1 要注意下这里,我这里写错了debug半天,原先写的是将1右移一位即2。 for (int i = 1; i <= n; i++) { ...
洛谷题单——数据结构0x1
P3156 询问学号 1234567891011121314151617181920212223242526#include <iostream>using u32 = unsigned;using i64 = long long;using u64 = unsigned long long;using namespace std;const int N = 1e7 + 10;int a[N];int main(){ int n, m; cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> a[i]; } while (m--) { int x; cin >> x; cout << a[x] << endl; }} P3613...
ACjudge0x1
ACjudge0x1在打算法题的时候,我通常使用wsl2+vscode的组合(感觉默认cpp提示太烂了,vs过于臃肿),当我们完成一道题目时,通常要使用g++编译,然后用cv大法查看是否ac。可是,在debug时,重复的动作过于痛苦,且难以区分输入输出。因此可以使用linux命令来解决这一问题。 1g++ {path} && ./a.out < input.txt > output.txt && diff output.txt answer.txt -y 我们当然可以写入python脚本(其实shell脚本更简洁),并加上初始化功能(- i) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778#!/usr/bin/env python3import osimport...
数据结构
[toc] acwing826. 单链表 头插法: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970#include <iostream>#include <cstring>using namespace std;const int N = 100005;int head, e[N], ne[N], idx; //头节点, 值,下一节点,idx索引节点的编号void init(){ head = -1; idx = 0;}void add_to_head(int x ){ e[idx] = x; ne[idx] = head; head = idx; idx ++;}void remove(int pos){ ne[pos] =...
Codeforces Round 961 (Div. 2)
A 目标是将所有 k 个棋子放置在棋盘上,使得占据的对角线的数量最少。 易得最大对角线一条,长度为n,之后的对角线长度一次减一,且相同长度的对角线有两条。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546#include <iostream>using namespace std;void solve(){ int m,n; int cnt = 0; cin >> m >> n; if(n == 0) { cout << cnt << endl; return; } cnt+= 1; n -=m; m--; int flag = 0; while(1) { if(n <= 0) break; if(flag == 2) ...