题目链接
题目大意:
一共有t组数据,且每组数据都输入一个n表示需要连接在一起的天数、一个r表示每周可以有的最大天数,即每周天数可以为w()。以自己定义的每周天数制成(方格表)日历,且在日历上将需要连在一起的天数画出来(涂色);最终观察连在一起的天数可以构成的不同图形个数k,最后输出k。
思路:
首先,让我们考虑一下如果一个星期有确切的w()天。
如果w<n,则所涂的天数大于一周的天数。所以有w个有效的形状,每个形状有w天宽度(第一周包含1,2,…,w天),且w的值不同,形状也不同。否则n≤w,只有一个有效的形状,形状与w的值无关。
且根据公式 a+(a+1)+(a+2)+…+b=(a+b)∗(b−a+1)2,可以得到不同形状的数目k并输出。
AC代码:
#include <iostream>
using namespace std;
typedef long long ll;
int main() {
int t;
cin >> t;
while(t--) {
ll n, r, s = 0;
cin >> n >> r;
if(r >= n)
s = n * (n - 1) / 2 + 1;
else
s = (1 + r) * r / 2;
cout << s << endl;
}
return 0;
}