可 选 的 一 周 长 度 有 [ 1 , r ] 可选的一周长度有[1,r] 可选的一周长度有[1,r]
放 n 天 , 有 多 少 种 形 状 ? 放n天,有多少种形状? 放n天,有多少种形状?
分析
首先对于固定的n和固定的周长k,假如确定了在一周的第几天开始涂色
接下来就只能固定一行一行涂色,只有一种可能性
假 如 周 长 是 1 , 只 有 一 种 可 能 就 是 一 列 摆 放 假如周长是1,只有一种可能就是一列摆放 假如周长是1,只有一种可能就是一列摆放
假 如 周 长 是 2 , 那 么 可 以 从 一 周 的 第 一 天 开 始 涂 色 , 也 可 以 从 第 二 天 开 始 涂 色 假如周长是2,那么可以从一周的第一天开始涂色,也可以从第二天开始涂色 假如周长是2,那么可以从一周的第一天开始涂色,也可以从第二天开始涂色
假 如 周 长 是 n , 可 以 从 第 i ∈ [ 1 , n ] 天 开 始 涂 色 假如周长是n,可以从第i\in[1,n]天开始涂色 假如周长是n,可以从第i∈[1,n]天开始涂色
所 以 一 般 来 说 , 方 案 数 构 成 一 个 等 差 数 列 , 答 案 是 r ∗ ( r + 1 ) / 2 所以一般来说,方案数构成一个等差数列,答案是r*(r+1)/2 所以一般来说,方案数构成一个等差数列,答案是r∗(r+1)/2
但 是 , 有 特 殊 情 况 \color{Red}但是,有特殊情况 但是,有特殊情况
当 r 大 于 等 于 n 时 当r大于等于n时 当r大于等于n时
如 果 我 们 选 择 的 周 长 i ∈ [ n , r ] , 所 有 的 这 些 只 有 一 种 可 能 如果我们选择的周长i\in[n,r],所有的这些只有一种可能 如果我们选择的周长i∈[n,r],所有的这些只有一种可能
就 是 从 第 一 天 开 始 放 , 在 一 行 内 放 满 n 天 就是从第一天开始放,在一行内放满n天 就是从第一天开始放,在一行内放满n天
其 余 时 候 从 第 二 天 以 后 开 始 放 置 , 最 多 只 能 延 伸 到 下 一 行 , 且 这 两 行 都 小 于 n 其余时候从第二天以后开始放置,最多只能延伸到下一行,且这两行都小于n 其余时候从第二天以后开始放置,最多只能延伸到下一行,且这两行都小于n
这 种 可 能 性 已 经 在 前 面 计 算 过 了 这种可能性已经在前面计算过了 这种可能性已经在前面计算过了
如 果 有 疑 惑 , 请 看 下 面 的 这 种 图 , 是 不 是 一 定 会 和 前 面 重 复 ? 如果有疑惑,请看下面的这种图,是不是一定会和前面重复? 如果有疑惑,请看下面的这种图,是不是一定会和前面重复?
#include
using namespace std;
typedef unsigned long long ll;
ll t,n,r;
int main()
{
cin >> t;
while(t--)
{
cin >> n >> r;
if(r>=n)
{
r=min(n-1,r);
cout<