codeforce:1151_DIV2(round 553) 解题报告(A->D)

A:
题意:通过将串的单个字符增1或减1变换操作使得“ACTG"是原串的子串。问最小的变换次数(‘A’ 减 1得到’Z‘)
解法:直接暴力,枚举每一个字符作为起点的连续四个字符变成ACTG要几步,然后取最小值就行。

B:
题意:给一个m,n的矩阵,问能不能每行都选一个元素,使得最后的异或和大于0,输出选数的方案。
解法:构造(标签贴了个DP,被干扰了,往DP方向想了半天觉得实在是没解去看了题解。。。dp主要是状态转移有后效性,想了很久也没想到能消除后效性的方法,就放弃了)
先构造出一个答案出来,可以每行都选第一个,如果异或和大于0,那么直接得到答案。如果小于0,将其中一行的数字换成不同的数字,如果都没有不同的数字,那么无解。否则得到一个答案。

C:
题目大意:有奇数和偶数两个无穷大的集合,奇数集合是{1,3,5,7…},偶数集合是{2,4,6,8…},先从奇数取1个,然后从偶数取2个,再在奇数取4个…,每次取都取前面的数量的两倍,在两个集合交替取,然后将取出来的数构成一个新的无穷大的集合 {1,2,4,3,5,7,9,6,8,10,12…}。
问在新的集合中,第 l 到 第r个的数字的和是多少?(对1e9 + 7取模)

解法:数学(等差数列,等比数列) + 模拟
https://blog.csdn.net/qq_41997978/article/details/89534553

D:
题目大意:给出一个序列,每个元素初始位于第i个位置,且有两个权值ai,bi。希望通过调整位置使ai * (i - 1) + bi * (n - i) 的和最小。
解法:贪心
考虑只有两个元素的情况,(ai,bi),(aj,bj),如果第i个元素在前面,答案是aj + bi,如果第j个元素在前面,答案是ai + bj。那么第i个元素什么时候站在第j个元素的前面呢? 当aj + bi < ai + bj的时候,移动一下位置,就是aj - ai < bj - bi。按这个方式排序,验证一下样例。

你可能感兴趣的:(数据结构与算法,算法,ACM)