链接 I. Interesting Scoring Systems J. Joyful Numbers K. Königsberg Bridges L. Long Grid Covering 签到题。 A. Adjacent Rooks \(GF\) 大失败,\(dp\) 大胜利。 填排列一种很经典的 \(dp\) 是从小到大依次插入,这样能比较好处理相邻数之间的关系 所以设 \(f_{i,j,0/1}\) 表示
The 2021 Shanghai Collegiate Programming Contest 持续更新。 比赛链接 A.小A的点面论 出锅了,给你两个向量,求与他们垂直的向量。 马上想到叉积。 但是叉积中间那个方向要变一下的,还是基础太差了。 还好我队友看出来了,不然出大锅… 重新打一遍!偷什么懒啊,我有那资格偷懒吗555
自述 进了两次 ICPC World Final,本来该退役了,但机缘巧合又重新开始刷题了。没想到 BZOJ 居然无了,就只好刷 Codeforces 了。 传送门 Contest A B C D E 1 1 1 1 1 1
题目链接: Leetcode Weekly Contest 264 1、2047. Number of Valid Words in a Sentence 难度:Easy 代码: class Solution { public int countValidWords(String sentence) { int j=0; while(j<sentence.length()&&sentence.charAt(j)==' '){
感觉这场好简单,去年场上做的CCPC都好难,嘤嘤嘤 这场的题目都挺卡的。 L. LRU Algorithm 只能说这个时间非常的卡。 写了哈希和散列表T掉了,然后改成暴力for询问判断,这下时间正常了,然后一直wa。最后发现询问全\(0\)的时候也要输出\(\text{Yes}\),是不是有一点点坑。 哈希需要注意: 哈
原题链接Critical Structures #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; #define mp make_pair #define newline puts("") const int maxn = 1010; int n,m; vector<int> G[maxn]; int dfn[
https://codeforces.com/contest/1593/problem/D1 分析 求最大公因子。 #include <bits/stdc++.h> using namespace std; #define LL long long int t,n,a[45],d[45]; int find(int a,int b) { if(a>b)swap(a,b); int r=b%a; while(r) { b=a; a=r; r=b%a; } ret
比赛链接:https://atcoder.jp/contests/abc222/tasks A - Four Digits 题意 给出一个整数 \(n\) ,以宽度为 4 补前导 0 的格式输出。 \(0 \le n \le 9999\) 题解 即 printf("%04d", n) 。 代码 #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_s
目录题解实况总结 题解 A,B 略 C: 这个操作相当于把 \((a,b)\) 变成 \((b+1,a-1)\) 观察 \(a'_i=a_i+i\) 这个东西。设我们操作的是 \(a_i,a_{i+1}\),然后操作完会变成 \(a_{i+1}+1,a_i-1\) \(a'_{i}=(a_{i+1}+1)+i=a_{i+1}+(i+1)\) \(a'_{i+1}=a_{i}-1+(i+1)=a_{i}+i\) 发现这个东
链接:LeetCode [Leetcode]5894. 至少在两个数组中出现的值 给你三个整数数组 nums1、nums2 和 nums3 ,请你构造并返回一个 不同 数组,且由 至少 在 两个 数组中出现的所有值组成。数组中的元素可以按 任意 顺序排列。 遍历即可。 class Solution { public List<Integer> twoOutOf
Exawizards Programming Contest 2021(AtCoder Beginner Contest 222) A - Four Digits 水题 B - Failing Grade 水题 C - Swiss-System Tournament 题意:有\(2n\)个玩家,玩\(m\)轮石头剪刀布,每一轮都由两两不同的玩家进行,按照总积分的顺序进行,如果两个玩家积分相同,则序号小的排在上
链接:LeetCode [Leetcode]2027. 转换字符串的最少操作次数 给你一个字符串 s ,由 n 个字符组成,每个字符不是 'X' 就是 'O' 。 一次 操作 定义为从 s 中选出 三个连续字符 并将选中的每个字符都转换为 'O' 。注意,如果字符已经是 'O' ,只需要保持 不变 。 返回将 s 中所有字符均转换为
按时长排序,在0时之前做的都在0时提交,0时之后的都直接提交,然后贪心做。 理解其正确性: 考虑对0时后罚时的理解:如果有没做出来的题,那么每一分钟都会对罚时有贡献,所以我们要使题的数量尽可能小,所以贪心是正确的。 #include<cstdio> #include<iostream> #include<algorithm> using name
Reverse Game 博弈、思维 大意:给定一个01字符串S,两人轮流操作,每次可以选择“10”、“110”、“100”、“1010”进行翻转。不能操作的判输。问谁会获胜? 思路:题目给的东西都不是随便给的,观察上面给出的几个字符串我们就会发现,最终不能继续进行操作的时候一定是前半部分全部是0
\(\texttt{Contest 100}\) \(\texttt{Problem C:}\) \(\texttt{*3 or /2}\) 每次操作对长度为 n 的序列里的每个元素 \(\times 3\) 或 \(\div 2\) ,每次操作至少要一次 \(\div 2\),求最多的操作数 因为 \(\times 3\) 其实对结果没有影响,所以我们只要数每个数有几个质因子 \(2\) 再
去掉所有的 \((a_i,a_j)\),剩下了一堆 \((a_i,-)\) 和 \((-,-)\) 。因为 \((-,-)\) 是等价的,方案数大概很容易推,这点我们等下再说。 接着就是一堆 \((a_i,-)\) 怎么计算方案数,放在一起 dp,设 \(f_{i,j,k}\) 表示从后往前第 \(i\) 个,有 \(j\) 个普通失配点和 \(k\) 个限制失配点,考虑
Rose 很有趣的题目一道 显然的贪心就是按照时间顺序做,先最耗时短的,零点前的都零点交,零点后的都做完就交 正确性怎样保证呢 我们按照这个耗时进行排名后,假如交换两个任务的话 如果这两个任务都再零点前,没有影响, 如果后一个任务跨零点了,那么交换以后,后面的任务的罚时不会变,但前面的
题组传送门 题意 现在给你一个含有 n n n个正整数的集合 a [ ] a[ ]
H.Set 随机。 #include <bits/stdc++.h> using namespace std; int main(int argc, char *argv[]) { ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); int k, r; cin >> k >> r; vector<int> T; int cnt1 = (512 - 1) / r +
题意:一个长度为\(n\)的序列\(x\),\(m\)次操作,有两种,一种是对区间\([l,r]\)的数乘上\(w\),一种是询问\([l,r]\)的每个数的欧拉函数之和。 题解:首先看数据范围,\(x[i]\)和\(w\)的值都很小,最大才\(100\),根据欧拉函数公式:\(\phi [N]=N*(1-\frac{1}{p_1})*...*(1-\frac{1}{p_n})\),\(p
分析: 根据欧拉函数的那个性质 if(p是质数) { if(i % p == 0) f[i * p] = f[i] * p; else f[i * p] = f[i] * (p - 1); } 每次区间乘的那个数小于等于100,所以我们可以考虑把100以内的数质因数分解,区间乘100相当于区间乘两个2和两个5,但是根据那个性质,又分为了两种情况,
题意:有2行,每行\(n\)个点,给你\(m\)个连接上下两行的边,问你最对能选多少条边,这些边互不相交。 题解:先固定选上面或者下面一行作为起点去遍历,假设选下面一行,我们从头开始遍历,假设遍历到\(i\)个点时,枚举它的所有出边\(to\),假设这条边的终点为\(j\),设\(dp[j]\)表示区间\([1,j]\)的
题意:给你\(n\)个ip地址,以及长度和它所对应的next ip地址,有\(m\)个询问,在\(n\)个给定的ip地址中找到公共前缀大于所给长度并且最长的对应ip地址。(疯狂口胡) 题解:每个ip地址有四个数,我们将其变成一个32位的数,然后建一颗trie树,直接找就行了。。。 代码: #include <bits/stdc++.h>
题意:有\(k\)个机器,下标\([0,k-1]\),现在有\(n\)个任务,每次给你起始时刻和持续时间,第\(i\)个任务从第\(i\mod k\)个机器开始,如果当前机器没有任务在进行,则执行这个任务,否则去找\((i+1)\mod k\),....,如果所有机器都在执行任务,则忽略这个任务,所有任务询问完后,问你哪些机器执行任
I Neiborhood Search 题意:签到题 思路:主要是学习stringstream,记得加头文件sstream 注:当时以为这个题会卡A的范围,就开始找大数,因为最开始就是类似这样写的,没有用stringstream,只是普通的读入,后来才发现就是多空格的问题,但是比赛的时候一直以为是卡int和long long,也是够了,后来还是队