【Codeforces】Magical Calendar

题目链接

题目大意:

一共有t组数据,且每组数据都输入一个n表示需要连接在一起的天数、一个r表示每周可以有的最大天数,即每周天数可以为w(1\leqslant w\leqslant r)。以自己定义的每周天数制成(方格表)日历,且在日历上将需要连在一起的天数画出来(涂色);最终观察连在一起的天数可以构成的不同图形个数k,最后输出k。

思路:

首先,让我们考虑一下如果一个星期有确切的w(1\leqslant w\leqslant r)天。

  • 如果w
  • 否则n≤w,只有一个有效的形状,形状与w的值无关。

且根据公式 a+(a+1)+(a+2)+…+b=(a+b)∗(b−a+1)2,可以得到不同形状的数目k并输出。

AC代码:

#include 
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;
}

 

你可能感兴趣的:(ACM_思维提升)