NKS信息学竞赛高一暑期周测Ⅰ
总结与反思
T1: 跳马(jump)
文件名 jump.cpp/.in/.out ,时间限制1秒,空间限制256MB,编译开启 -O2 优化。
问题描述
果果上课觉得无聊,于是掏出一枚中国象棋中的"马"棋子开始玩了起来。 中国象棋中的"马"走 “日” 字,即横坐标跳1、纵坐标跳2,或者横坐标跳2,纵坐标跳1。 果果把"马"放在一个二维网格棋盘的左下角坐标为(0, 0),并且选定了一个终点(n, m),果果想知道,有 多少种不同的方案可以让"马"走到终点? 果果不喜欢走回头路,因此每经过一次跳跃,横纵坐标都要离目标更近。
solution 1:可以将图像简化为一个杨辉三角,于是我们我可以确定n,m,是否有解,以及转化为求解组合数;
solution 2:每个点有且只有两种走法,所以,我们我可以解出一个二元方程;并且用组合数求解
T2: 果苣之手(handofgg)
文件名 handofgg.cpp/.in/.out ,时间限制1秒,空间限制256MB,编译开启 -O2 优化。
问题描述
俗话说:“果苣在手,天下我有”。而拥有果苣之手的你,决定当一个无情的发牌员。 一副牌有 张,编号为 。初始时牌按编号顺序排列,即位于 号位置的牌恰好是 号牌。为 了公平,发牌前要先洗牌。果苣之手的特性决定了单次洗牌的规律,当一次洗牌结束后,原本位于位置 的牌被洗到了 ,而 构成了一个排列 。果苣之手还决定了你必须要重复洗牌 次。 请拥有果苣之手的你完成洗牌并输出洗牌后牌的顺序。
solution: 构成的图像一定会形成多个环,且每个点的出度都为1;所以不同环变换是有周期的;算出每个环变换整周期后的步数,再转移即可;
T3: 平方数(squarenum)
文件名 squarenum.cpp/.in/.out ,时间限制1秒,空间限制256MB,编译开启 -O2 优化。
问题描述
果果喜欢开平方根结果为整数的数,这样的数也被称为完全平方数。 现在果果手里有一个整数数组 , 她想知道:在这个数组的 个非空子数组中,有多 少满足所有数的乘积是完全平方数。
solution :,我们可以发现对于一个完全平方数,它所含的每个质因子,都是偶数个,于是我们艰难的想到了高斯消元,将每个给出的数字分解质因数,并将其含有的每个质因数的个数(因为只需要判奇偶)用0/1表示,最后求解方程;
ps1:由于是分解质因数,(n<=1e9)所以我们可以先筛出一个二十万的表,然后,对于任意一个数,至多只会有一个大于根号inf的质数,且每个数至多有9个不同的质因数;
ps2: 本题的n<=500;所以质因数的种类(方程的个数)有可能大于n,但是,根据上面的分析,于是,我们可以大胆猜测时间复杂度不会超标;
T4: 简单模板水题(template)
文件名 template.cpp/.in/.out ,时间限制1秒,空间限制512MB ,编译开启 -O2 优化。
问题描述
经过一段时间的学习,果果发现很多题都是很简单的模板水题,比如下面这题。 有一个长度为 的数列 ,初值全为 。 我们要对这个数列进行 次如下操作: 选择一个连续子数列 ,将其中小于 的值全部修改为 求 次操作后的数组。
unsigned long long x, y, z;
inline unsigned long long RNG() {
x ^= x << 16;
x ^= x >> 5;
x ^= x << 1;
unsigned long long w = x ^ y ^ z;
x = y;
y = z;
z = w;
return z;
}
solution 1:线段树(复杂度有点为萎),但是因为(W[p]记录区间最小值)W[p]>v就不修改的剪枝加上输入数据的保证随机性,所以,可以卡过,甚至比std更快
W[p]记录区间最小值)W[p]>v就不修改的剪枝加上输入数据的保证随机性,所以,可以卡过,甚至比std更快
solution 2 :正解st表,修改o(1),查询o(nlogn),修改会比理论上的线段树更快,但是(实际运行,会差不多);