牛客周赛 Round 135
比赛链接 https://www.bilibili.com/video/BV1pxcrz6EKm A 考察顺序结构 1234567891011121314#include <bits/stdc++.h>using namespace std;const int N = 1e3;typedef long long ls;void sol(){ ls n; cin >> n; cout << n / 3 * 3 << endl;}int main(){ sol();} B 这道trick题目卡了我一整个比赛,我用dp写超时了然后就用map来优化,结果还是超时。头脑直接干报废了,活该不看数据范围就开始写题。其实一项之后就可以发现可以化简为 元素-下标相等 。对于任意选出来的数都要满足元素-下标相等,题目让我求最长的这种序列,那就是求这个差值的众数,可以用map来求解。 1234567891011121314151617181920212223242526#include <bits/stdc+...
2025年香港城市大学(东莞)新生程序设计个人排位赛正式赛(同步赛)
2025年香港城市大学(东莞)新生程序设计个人排位赛正式赛(同步赛) ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛 牛客竞赛OJ F 优香数列 观察出来了,需要将公差为 1 的等差数列的和与 n 作比较,但是没有想出来要用二分答案。 答案有序 一部分满足条件,一部分不满足条件 1234567891011121314151617181920212223242526272829303132#include <bits/stdc++.h>using namespace std;typedef long long LL;LL t, n;int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> t; while (t--) { cin >> n; LL l = 1, r = 10000000000; while (l < r) { LL ...
Codeforces Round 1065 (Div. 3)
A 1234567891011121314151617181920#include <bits/stdc++.h>using namespace std;int t, n;int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> t; while (t--) { cin >> n; if (n & 1) { cout << 0 << "\n"; } else { cout << (n / 4) + 1 << "\n"; } } return 0;} B 123456789101112131415161718192021222324252627282930313233343536373...
Codeforces Round 1073 (Div. 2)
Dashboard - Codeforces Round 1073 (Div. 2) - Codeforces A 模拟一下即可 1234567891011121314151617181920212223242526272829303132333435363738#include <bits/stdc++.h>using namespace std;int t, n;typedef pair<int, int> PII;int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> t; while (t--) { cin >> n; vector<PII> v(n); for (int i = 0; i < n; i++) { cin >> v[i].first; v[i].second = i % 2 == 0 ? 1 : 0; } sort(v.begin(), v.end()); bo...
C算法总结(2026.05.25)
C算法总结 附件下载 本文 PDF 版本可点击下载: 点击下载 PDF 版本 说明 反馈/交流问题进Q群:856837293 洛谷团队链接: https://www.luogu.com.cn/team/118658 感谢综高23计算机杨青松同学的传播! 本文章为公益性文章,免费下载,转载需标注原作者,具体详情见文章结尾“关于作者”部分。 注:点赞评论需要注册github账号,有条件的学弟学妹们麻烦点赞评论一下,谢谢啦! 第一章 数学问题 第一节 特殊数 一.因子 概念:在数学中,因子是指能够整除给定数的数 123456输出n的所有因子int n, i;scanf("%d", &n);for (i = 1; i <= n; i++) if (n % i == 0) printf("%d\t", i); 二.真因子 概念:在数学中,真因子是指一个自然数除自身以外的因子 1234567891011输出n的所有真因子#include <stdio.h>int main(){ int ...
三晋七校第一届新生赛(同步赛)
三晋七校第一届新生赛(同步赛)_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ F 和移位 最后剩余1h才开始写这道题的,虽然有了一点思路但是已经没时间写了。我观察到n的大小只有2000,所以我觉得可以先用n^2构造一个数组出来,然后进行后续的处理。 当然,比完赛后自己写了下写出来了,真的是太棒了OvO 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354#include <bits/stdc++.h>using namespace std;typedef long long LL;const LL N = 1e5 + 10;int x, n, q;int a[N];map<int, vector<int> > mp;map<int, int> dis;int main(){ ios::sync_with_stdio(0); cin.tie(0);...
排序算法
第一节:普遍排序算法 1.计数排序 核心思想:开一个带含义的数组,下标为待排序的数x,下标对应的数值表示元素x出现的数量。由于数组下标是有序的,因此在统计过程中就将输入的元素x进行了排序。 优缺点:计数排序只适用于值域不是很大但数量可以很多的情况;另外,计数排序只适用于正整数排序,不能排序浮点型或字符串类型。 时间复杂度O(n+k)O(n+k)O(n+k) 空间复杂度O(k)O(k)O(k) 1234567891011121314151617#include <iostream>using namespace std;int a[1000] = {0}, n, x; //开1000的数组,那么x的值域限制在0~999int main(){ cin >> n; for (int i = 1; i <= n; i++) { cin >> x; a[x]++; } for (int i = 0; i <= 999; i++)//开1000的数组,那么x的值域限制在0~999 if (...
牛客2025秋季算法编程训练联赛2-基础组
(1条未读私信) 牛客2025秋季算法编程训练联赛2-基础组_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A 做游戏 读了一遍题目发现根本没有思路, 哎,蒟蒻的oi选手啊~ 为什么呢,我当时在想牛牛出石头,牛可乐出剪刀,牛牛赢了;如果说牛可乐出布赢了牛牛怎么办呢。我在考虑相互之间的博弈关系。 deepseek:你提到“牛可乐出布赢了牛牛怎么办呢”,但问题是要最大化牛牛的赢局,所以我们只关心牛牛赢的情况,而不关心牛可乐赢的情况。在计算牛牛赢局时,我们不需要考虑牛可乐赢的情况,因为赢局是独立的。 由于这三种获胜情况互不冲突,牛牛的总获胜局数即为这三种情况之和。这样计算可以确保牛牛在给定的出拳次数下获得最大获胜局数,因为每次匹配都是最优的,不会相互影响。 1234567891011121314#include <iostream>using namespace std;long long a, b, c, x, y, z;int main(){ cin >> a >> b >> c &g...
牛客2025秋季算法编程训练联赛3-基础组
(0条未读通知) 牛客2025秋季算法编程训练联赛3-基础组_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A 牛牛的DRB迷宫I 对于这个题目,我上来想到的就是用DFS来暴力求解(因为我当时并不清楚DFS的时间复杂度),导致TLE。现在,我需要对DFS在二维矩阵中的时间复杂度做个总结: 对于本题,最坏情况就是所有位置都是’B’,也就是每个位置都有两种选择。 路径长度:从(1,1)到(n,m)需要走(n-1)+(m-1)=n+m-2步 路径数量: $2^{n+m-2} $ 时间复杂度:O(2n+m−2)O(2^{n+m-2})O(2n+m−2) 当n=m=50时: 路径长度 = 98步 路径数量 ≈ 2^98 ≈ 3.17 × 10^29 超过了10^8的时间复杂度,必然会TLE 总结:DFS在二维矩阵中时间复杂度为O(路径数量)O(路径数量)O(路径数量) = O(2路径长度)O(2^{路径长度})O(2路径长度) 在n+m>40时完全不可行。 随后,我又想到以前写过一道动态规划基础题和这个类似,概括下就是从(1,1)开始只能向...
牛客2025秋季算法编程训练联赛4-基础组
牛客2025秋季算法编程训练联赛4-基础组_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ C 子段乘积 比赛时思路(没写出来OvO): 本题一开始想到了一个方法,简单来说就是先乘上一个数然后除掉结尾的数每次运算进行取模,但是发现0这个数处理比较复杂,于是就一直纠结在处理0的问题上。怎样选择k个数,其中不包含0呢? 我想到了状态记录,将0位开始的k个数所对应的状态记录为1,其余为0,那就将以这个数据结尾的k个数相乘再取最大值就可以了。但是我忽视了时间复杂度,状态记录需要两层循环,时间复杂度是O(nk)O(nk)O(nk)超时了。 我又想到了个方法,就是用last记录上一次0出现的下标,如果当前非0数离上一个0距离>k,那就将以这个数据结尾的k个数相乘再取最大值,但是我想了好久都没有实现。 AC思路: 思路1:尺取法,l代表左端点,r代表右端点。l先不动,r往前扫描,如果成功扫到,有k个非0元素的子段就累成起来,最后把最左端的元素除了,左端点往前移动,l++,再继续扫描。再未达到k个非零元素的子段前,如果遇到0,当前的区间就废了 ,左端点直接到...