【Codeforces】Magical Calendar

    技术2022-07-12  78

    题目链接

    题目大意:

    一共有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; }

     

    Processed: 0.009, SQL: 9