n,m (1≤n≤10^5, 1≤m≤10^9).
思路:
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
C. No Bug No Game
题目大意:
给定n个物品和限定k,要求最大化分数。物品的选择顺序可以任意。
第i物品一行pi代表个数,后面pi个wij代表容量(不一定递增),记录sum为∑pj (1≤j
- sum+pi≤k 得到w(i,pi)的分
- sum≥k, 不能再加分了。
- 否则得到w(i,k−sum)分。
1≤n≤3000, 0≤k≤3000
1≤pi≤10;1≤wi,j≤10^5
思路:
简单的背包问题变型,可以将sum看做是背包容量,在k之内做动态规划。区别就是如果sum+pi>k,就会有一个物品不选满(选到刚好达到k的容量并得到相应的价值)。
用f[i][j][z]表示从前i个物品当中选,总和刚好为j,且z=0表示所有物品选满,z=1表示有一个没有选满的物品。转移方程见代码。
最后在枚举更新答案的时候需要判断j==k的时候才可以更新f[i][j][1]这个情况。
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
D. Money Game
题目大意:
n个人玩游戏,第i个人初始值为ai;每一轮会进行:从前往后,前一个人把他的值一半给后一个人,最后一个会给第一个。
问经过2022^1204轮之后,输出每个人的值,误差在10^-6之内。
2≤n≤10^5
1≤ai≤10^6
思路:
打表可以看出经过很多轮次后,最后满足a1=2*a2=...=2*an,而且整个序列的和不会因为操作而改变。数值的和记为s,当次数趋于无穷时,第一个数为2s/(n+1),后面都是s/(n+1)。
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
E. Oscar is All You Need
题目大意:
T组测试,每组给定一个n,和1-n的排列,可以最多操作2*n+1次,每次操作将数组分为非空的三个部分,交换第一个和第三个部分。问字典序最小序列。输出操作次数和方案。(不要求操作次数最小)
1≤T≤120
3≤n≤1000
思路:
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
F. Da Mi Lao Shi Ai Kan De
题目大意:
有n各组,每组给一些字符串,从组中选择含有字串"bie"的加入到一组中(如果存在了不加了),如果可以添加就输出这个字符串,否则输出“Time to play Genshin Impact, Teacher Rice!”
思路:
水题,用string和set模拟即可。
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
K. Master of Both
题目大意:
给定n个字符串,q此询问,每一次询问都定义一个字母字典序大小规则,在这种大小规则下求n个字符串逆序对的个数。
1≤n≤5×10^5, 1≤q≤5×10^4
思路:
在比较两个字符串的时候,只需要比较第一个不相同字母的大小就可以了。建立trie树,在建树的过程中维护cnt[p]的值,表示以p为前缀的字符串个数。再用inv[i][j]记录序列中(j,i)的对数个数。
注意有一种特殊情况需要单独算:当一个字符串插入完后,要加上其所有的子节点。因为它可能是前面字符串的一个前缀,这种情况它一定会和这些字符串构成逆序对。
最后计算答案就是两重循环,每次加上预处理出来的inv[i][j] (j>i)即可。
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
开坑开坑~~~
由于期末考试压力,其他题目待补题qwq,后面会持续更新~