CF160 Div.2 全场题解
CF262A题意:罗马(一个流行的俄罗斯名字,意思是“罗马”)喜欢小利沃夫大象的幸运数字。让我们提醒您,幸运数字是正整数,其十进制表示只包含幸运数字 4 和 7 。例如,数字 47 、 744 、 4 是幸运数字,而 5 、 17 、 467 是不吉利数字。罗马有 _n_ 个正整数。他想知道,这些整数中有多少的幸运数字不超过 $k$ ?帮他写解决问题的程序。
题解:每个数字检测数位有几个4和7,如果个数大于等于k了就答案+1.
CF262B题意:罗玛在一家卖电视的公司工作。现在他要准备一份去年的报告。罗玛有一份公司的收入清单。列表是一个由 $n$ 个整数组成的序列。公司的总收入是按顺序排列的所有整数的总和。罗马决定对数列中几个数字的符号进行精确的 $k$ 更改。他还可以改变数字的符号一次,两次或更多次。改变一个数的符号的操作将这个数乘以- 1 。帮助Roma执行更改,以使公司的总收入(结果序列中的数字总和)最大化。注意,Roma应该执行完全 $k$ 更改。
题解:贪大心,先挑好的,然后最后看看有没有剩的,有的话是偶数就不管是奇数就挑个最小的变成负数
R1T3题面给出若干个打折优惠:买 ...
CF158 Div.2 全场题解
A - Adding DigitsProblem - A - Codeforces
题面:给你一个数,你可以在后面增加 $n$ 个数,并且在增加数之后必须保证当前数能被 $b$ 整除,请输出操作后的数。如果不能构造出来,就输出 -1.
题解:暴力去模拟即可,到一位然后枚举填的数字,能整除那么就填上,整除不了就输出 -1.
B - Ancient ProphesyProblem - B - Codeforces
题面:给你一个字符串,你需要解码一个日期,日期格式是 $dd-mm-yyyy$,从左到右分别为日,月,年。定义解码后的日期为出现次数最多的日期。有个要求是年份必须是在 2013 和 2015 之间,且日和月必须复合生活常识逻辑。
题解:扫一遍字符串,然后对接下来的字符判断,模拟题,也没大有代码量。注意判断的时候 2 月要特判,且格式和年份必须符合。对符合要求的日期进行压缩,压缩到一个 map 里,最后解压输出次数最多的即可。
C - Balls and Boxes题面对于一个序列 $b$,可以选择一个点将其值平铺。现在给出一个序列 $a$,表示平铺操作后的结果,并已知平铺操作的最 ...
CF104 Div.2 全场题解
A - Lucky TicketProblem - A - Codeforces
题意判断一个数是否满足条件:
只由 $4,7$ 组成。
前半段之和等于后半段之和(保证长度是偶数)
题解模拟即可。
B - Luck MaskProblem - B - Codeforces
题意找大于 $a$ 的,面罩数 $b$ 的,最小的 $c$ 并输出。
面罩数:按照从高位到地位的顺序把一个数中所有 $4,7$ 按顺序凭借在一起
题解do while 找符合条件的最小 $c$,注意一定是大于。
C - Lucky ConversionProblem - C - Codeforces
题意你有两个序列 $a,b$,有两种操作:
修改 $a$ 中的一个字符从 $4$ 到 $7$ 或者从 $7$ 到 $4$ 。
交换 $a$ 中任意两个字符
题解考虑修改最多可以让多少个字符变得正确(只能修改把 $7$ 和 $4$ 的数量补到相等的次数)然后剩余的还不相等就交换,交换次数除以二。
D - Lucky Number 2Problem - D - Codeforces
题意构造一个由 $4,7$ 构成的 ...
CF1706 Div.2 全场题解
A - Burenka Plays with FractionsProblem - A - Codeforces
题意给你两个分数,你可以让分母或者分子乘上一个数,问最少多少次操作可以让他们分母相同(需要约分)
题解纯模拟,细节较多。
12345678910ll g1 = __gcd(a, b), g2 = __gcd(c, d);a /= g1, b /= g1, c /= g2, d /= g2;if(a == 0 && c == 0) return printf("0\n"), void();if(a == 0 || c == 0) return printf("1\n"), void();ll p = a * d, q = b * c;ll g = __gcd(p, q);p /= g, q /= g;if(p == 1 && q == 1) printf("0\n");else if(p * q == p || p * q == q) printf("1\n");e ...
CF1689 Div.2 全场题解
A - Lex StringProblem - A - Codeforces
题意给定两个没有相同字符的字符串 $a,b$ 。每回合轮流从任意一个字符串中任意取一个字符,并插入到一个字符串 $c$ 的末尾。要求不能连续取同一个字符串中的字符大于 $k$ 次,如果两个字符串中有一个空了,
题解模拟即可,注意题目中强调的细节即可。
B - Mystic PermutationProblem - B - Codeforces
题意给出一个排列 $[1,n]$ ,要求构造一个排列 $[1,n]$,使得这两个排列之间的任意一个相同位置的元素都不相同,且满足这个排列的字典序最小。 如果无法构造出这样的序列则输出 $-1$ 。
题解正常贪心即正解,优先摆小的,如果相同就摆下一个,如果是最后一个就和前一个交换。
12345678910111213141516171819202122232425262728293031323334inline void Work() { if(n == 1) { printf("-1\n"); w ...
CF1230 Div.2 全场题解
A - Dawid and Bags of CandiesProblem - A - Codeforces
题意四个数分给两个人,必须分完,每个数只能给一个人,一个人可以拿到多个数,数字不可以被拆分。问能否有一种分配方式使得每个人获得数字的和相等。
题解分类讨论:
三个小的 = 一个大的
最大最小 = 次大次小
B - Ania and MinimizingProblem - B - Codeforces
题意给出一个不含前导零的数字,你可以修改至多 $k$ 次,问修改后结果的最小值是什么
题解第一位优先改成一,其余位改成零
C - Anadi and DominoProblem - C - Codeforces
题意在一个有向图上,摆放多米诺骨牌,要求每个牌朝向同一个点的点数相同,每个牌只能用一次。
题解注意到 $n$ 的数据范围极小。
当 $n\le 6$ 时,最多只有 $15$ 条边,除去(1,1),(2,2)…六条边,每个节点对应一个数,给的边数 $m$ 即为可放置的骨牌数。
当 $n=7$ 时,因为每个顶点出发都只能为 $1\sim 6$,那么,必然第七个顶点会和前面 ...
CF1706 Div.2 全场题解
A - Another String Minimization 问题水
B - Making Towers很显然两个间隔为偶数的相同数字可以连在一起
C - Qpwoeirut And The City奇数显然。偶数可以认为是选择一个偶数前缀和奇数后缀,结束了。
D - Chopping Carrots不难想到枚举最小值然后二分 check,然后优化就是把最小值整除分块。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int , int > pii;typedef unsigned long long ull;namespace FastIO { ...
CF1699 Div.2 全场题解
A - The Third Three Number 问题Problem - A - Codeforces
题意给你一个整数 $n$,请输出三个数 $a, b, c$ 满足 $(a\oplus b) + (a\oplus c) + (b\oplus c) = n$。
题解考虑异或的性质 $(x\oplus x)=0,(x\oplus 0) = x$。
则很快可以得到若 $a=x,b=x,c=0$ 的情况下,原式的结果即为 $2x$。
那么直接输出 n/2 n/2 0 即可。
但是上述结论很显然只对于偶数成立,在样例中 $n$ 为奇数的只有一个,表现为无解。那么是否能证明所有的奇数都能证明无解呢?
对于二进制的末位进行考虑。发现不论是 $1,1,1$、$1,1,0$、$1,0,0$、$0,0,0$ 最后的末位之和都是偶数,也就是说,如果是奇数的 $n$,是永远不可能找到一个合法的 $a,b,c$ 来表示的。证毕。
B - Almost Ternary MatrixProblem - B - Codeforces
题意构造一个 $n\times m$ 的矩阵,满足要求:对于矩阵上任意一个 ...
【奇技淫巧】inline 的机制
书接上文
简单来说我认识了一个大佬,他对于 inline 的观点是:在单个文件的编译中,从语言的角度来讲,inline没有任何作用
所以说,他认为,inline 完全没有任何作用,我们加 inline 是没有任何意义的。
对于 GCC(我们的编译器)的官方文档:
GCC does not inline any functions when not optimizing unless you specify the ‘always_inline’ attribute for the functionTranslate : 你标了inline它也不会内联,它只认gnu::always_inline
在编译器开了优化时,内联不内联完全取决于编译器自己想法而不是看 inline 标记;而在编译器没有开优化时,他是不会做任何内联的;只有你指定 [[gnu::always_inline]] 才会“强制”让编译器内联
inline 的主要作用,并不是内联,而是允许重复定义。
这里所谓的重复定义,指的是:
一个可执行文件,经链接后一个符号的定义只能出现一次,这叫做单一定义原则(ODR)
但 i ...
【拾题杂谈】LuoguP3679 [CERC2016] 二分毯 Bipartite Blanket
题目大意大秦为你打开题目传送门
题目描述在二分图中,所有点被划分成了两个不相交的集合 $A$ 和 $B$,每条边都恰好连接着某个 $A$ 和某个 $B$。一个匹配是一个边集,满足没有任何两条边有相同的端点。我们称一个匹配 $M$ 覆盖了点集 $V$ 当且仅当 $V$ 中的每个点都是 $M$ 中至少一条边的端点。
给定一个二分图,每个点有一个正整数权值。定义一个点集的权值为其中所有点的权值之和。
给定一个参数 $t$,请统计有多少点集 $V$,满足 $V$ 的权值不小于 $t$,且 $V$ 被至少一个匹配 $M$ 覆盖。
输入格式第一行包含两个正整数 $n,m$,分别表示 $A$ 集合的点数和 $B$ 集合的点数。
接下来 $n$ 行,每行 $m$ 个 01 字符,其中第 $i$ 行第 $j$ 列为 $1$ 表示 $A_i$ 和 $B_j$ 之间有一条边。
接下来一行包含 $n$ 个正整数 $v_1,v_2,\cdots,v_n$,分别表示 $A$ 中每个点的权值。
接下来一行包含 $m$ 个正整数 $w_1,w_2,\cdots,w_m$,分别表示 $B$ 中每个点的权值。
最后一行 ...


