[原题传送门]
题意
Alice有很多种日历,这些日历的不同之处在于一周的天数不一样(即日历的宽度不同),Alice想要从日历的某一天开始用记号笔连续画n天,而她拥有宽度1到r的日历,且每一种都有无穷本,请问Alice可以画出几种形状?
思路
通过小规模穷举可以发现: 在宽度小于n的日历中,在每种日历上可以涂鸦出的形状的个数都是该种日历的宽度 如:当Alice要画4天 宽度为1的日历所画出来的形状为列数为1行数为n的长方形,一种形状 宽度为2的日历所画出来的形状有以下两种
宽度为3的日历所画出来的形状有以下三种 当使用宽度大于等于n的日历时,所涂鸦的形状都是行数为1、列数为n的长方形,
所以r>=n时,可以画出1+2+……+n-1+1种形状,即n/2*(n-1)+1种当r<n时,则可以画出1+2+……+n种形状,即(1+n)/2*n种
输入
输入由多个测试用例组成。第一行包含单个整数t(1≤t≤1000)——测试用例的数量。接下来的t行包含测试用例的描述。
对于每个测试用例,只有一行包含两个整数n,r(1≤n≤109,1≤r≤109)。
输出
对于每个测试用例,打印一个整数-问题的答案。
my Accepted code
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#define ll long long
#define db double
#define inf INT_MAX
#define s(a, n) memset(a, n, sizeof(a))
#define rep(l, a, b) for (ll l = a; l < b; ++l)
#define per(l, a, b) for (ll l = a; l >= b; --l)
#define debug(a) cout << '#' << a << '#' << endl
using namespace std
;
bool fi
= true;
const unsigned long long MOD
= 1e9 + 7;
int main() {
ios
::sync_with_stdio(false);
cin
.tie(0), cout
.tie(0);
int t
;
cin
>> t
;
while (t
--) {
db n
, r
;
cin
>> n
>> r
;
ll ans
= 0;
if (n
> r
) {
ans
= (1 + r
) / 2.0 * r
;
cout
<< ans
<< endl
;
} else {
ans
= n
/ 2.0 * (n
- 1);
cout
<< ans
+ 1 << endl
;
}
}
}