題目鏈接
題目大意:
給你一個 n ,一個 r ,塗日曆,連續塗 n 天,塗日曆的時候,日曆一行的天數有 k 天,1<= k <= r ,k 在 1 - r 中任取,問,塗出來的形狀有幾種是不同的。
解題思路:
想象一下,塗日曆是從左往右塗,一行塗完開始塗下一行,假如 k = 7,即一週有7天,那麼 你在第一個格子中開始塗 是一種形狀,在第二個格子開始塗也是一種,第三個開始是一種 ...... 到第7個開始是一種。即一週有 k 天,就會有 k 種不同的形狀。但是!!!這個的前提是 連續塗的 n 天是需要 大於 k 的,也就是必須大於 r, 再通俗點就是必須拐彎,不然,k > n 後一直都是 一橫遛
所以 ,當 n > r 時,結果是 r * ( r+1 ) / 2 ,即 1 到 r 的等差數列求和
那當 n<r 的時候呢,k= n-1 之前,n 都是大於 k 的,依舊是k等於多少,就有 k 種,但是當k 大於等於 n 的時候,只能是橫着一行,因爲如果拐彎的畫就不存在相鄰了,也就是隻存在 1 種。
所以,當 n <= r 時,結果是 1 + (n-1) *(n-1 +1) /2 , 就是 1 + (n-1) * n / 2 , 即 1 到 n-1 的等差數列求和
代碼如下:
#include<iostream>
using namespace std;
int main()
{
long long t,n,k,r;
cin>>t;
while(t--)
{
cin>>n>>r;
if(n>r)
{
cout<<r*(r+1)/2<<endl;
}
else
{
cout<<1+(n-1)*n/2<<endl;
}
}
return 0;
}