第一题:添数博弈 题目描述恭喜发现宝藏!微信搜索公众号【TechGuide】回复公司名,关注更多新鲜好文和互联网大厂的笔经面经。
作者@TechGuide【全网同名】
点赞再看,养成习惯,您动动手指对原创作者意义非凡欄
小A和小B创造了一个叫添数博弈的游戏,游戏规则如下:
首先在数池中添加两个整数xy,接下来,两个人轮流开始添数;添数的规则是在数池中任意选择两个数x,y,令m=x-y,若m不在数池中,则将m添加到数池中;若m已经在数池中,则游戏结束。
假设小A先选数,两人轮流操作添数,若有一方不能无法添数时,则该人就输了。
输入的第一行给出测试用例的数量T(1 对于每一个测试样例,输出获胜方的名字 时间限制:C/C++1秒,其他语言2秒 有一个网站叫做NowCoder,他的比赛机制非常有趣。当你参加一场比赛时,会根据你当前的 rating和排名来确定你的rating变化程度(正值代表rating增加,负值代表rating下降,0代表rating不变)。我们不关心他的具体计算函数,我们把一个连续的n场比赛抽象成三个数列 Note:rating可以出现负数,每场比赛都必须参加。 第一行两个正整数n,k(1 一行一个整数,代表结束后最高的rating值是多少。 给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且拥有小于 k 个逆序对的不同的数组的个数。 逆序对的定义如下:对于数组的第i个和第 j个元素,如果满i < j且 a[i] > a[j],则其为一个逆序对;否则不是。 参考力扣629,区别是需要累加1~k的数组和,即k次调用下面方法
空间限制:C/C++262144K,其他语言524288K#include
{an},{bn}{cn}。如果以你当前的实力参加第场比赛,那么你会得到ai的rating变化程度。如果你在这场比赛中作弊,那么你会得到6的rating变化程度,由于每场比赛难度不同,你在其中作弊的风险也不同。具体来说,如果你在第场比赛作弊,需要承担{cl的作弊风险。为了使得自己不被发现,你的总作弊风险不能超过k。假定你的初始rating为1500,请你找出一种参赛方式,使得结束后rating最高。#include
第三题:排列
题目描述
代码
Java版本
class Solution {
public int kInversePairs(int n, int k) {
final int MOD = 1000000007;
int[][] f = new int[2][k + 1];
f[0][0] = 1;
// 关注TechGuide 实时题库 闪电速递
for (int i = 1; i <= n; ++i) {
for (int j = 0; j <= k; ++j) {
int cur = i & 1, prev = cur ^ 1;
f[cur][j] = (j - 1 >= 0 ? f[cur][j - 1] : 0) - (j - i >= 0 ? f[prev][j - i] : 0) + f[prev][j];
if (f[cur][j] >= MOD) {
f[cur][j] -= MOD;
} else if (f[cur][j] < 0) {
f[cur][j] += MOD;
}
}
}
return f[n & 1][k];
}
}
CPP版本
class Solution {
private:
static constexpr int mod = 1000000007;
public:
// 关注TechGuide 实时题库 闪电速递
int kInversePairs(int n, int k) {
vector



