20210111大一寒假集训题之B. Magical Calendar

24 篇文章 0 订阅
24 篇文章 0 订阅

来源:https://vjudge.net/problem/CodeForces-1371B/origin
题目:
A competitive eater, Alice is scheduling some practices for an eating contest on a magical calendar. The calendar is unusual because a week contains not necessarily 7 days!

In detail, she can choose any integer k which satisfies 1≤k≤r, and set k days as the number of days in a week.

Alice is going to paint some n consecutive days on this calendar. On this calendar, dates are written from the left cell to the right cell in a week. If a date reaches the last day of a week, the next day’s cell is the leftmost cell in the next (under) row.

She wants to make all of the painted cells to be connected by side. It means, that for any two painted cells there should exist at least one sequence of painted cells, started in one of these cells, and ended in another, such that any two consecutive cells in this sequence are connected by side.

Alice is considering the shape of the painted cells. Two shapes are the same if there exists a way to make them exactly overlapped using only parallel moves, parallel to the calendar’s sides.

For example, in the picture, a week has 4 days and Alice paints 5 consecutive days. [1] and [2] are different shapes, but [1] and [3] are equal shapes.
在这里插入图片描述

Alice wants to know how many possible shapes exists if she set how many days a week has and choose consecutive n days and paints them in calendar started in one of the days of the week. As was said before, she considers only shapes, there all cells are connected by side.

Input
The input consists of multiple test cases. The first line contains a single integer t (1≤t≤1000) — the number of test cases. Next t lines contain descriptions of test cases.

For each test case, the only line contains two integers n, r (1≤n≤109,1≤r≤109).

Output
For each test case, print a single integer — the answer to the problem.

Please note, that the answer for some test cases won’t fit into 32-bit integer type, so you should use at least 64-bit integer type in your programming language.

Example
Input
5
3 4
3 2
3 1
13 7
1010000 9999999
Output
4
3
1
28
510049495001
Note
In the first test case, Alice can set 1,2,3 or 4 days as the number of days in a week.

There are 6 possible paintings shown in the picture, but there are only 4 different shapes. So, the answer is 4. Notice that the last example in the picture is an invalid painting because all cells are not connected by sides.

在这里插入图片描述

In the last test case, be careful with the overflow issue, described in the output format.
题意:n->代表所要画表格的个数(必须连续,不能间断);r->代表1到r的列数;
思路:数学归纳法(找规律):
通过列举,我们发现,当r > =n 列时,后面的图形都是一样的(也就是都是一行),所以归类都为1;前面的就为下面的算法
然后r < n列时,当r=1时,一种;r=2时,两种;r=3时,三种;。。。。(注意不要重复图形了),也就是一个简单的等差数列了,算r项的和,Sn=(r+1)r/2;
ok,解决了。注意上面的r都是1~r的值,是变化的,不是输入的固定值!
总结:(这里的r才是输入的)
当n<=r时,结果就是n
(n-1)/2+1;
当n>r时,结果就是r*(r+1)/2;
好啦,可能你会疑惑为什么上面的为什么减1下面的为加1;着就是个算法问题,自己列出来去算,最简式就是这样了,理解了就明白的。
代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long int res,t,n,r;
	cin>>t;
	while(t--){
		cin>>n>>r;
		if(n<=r) res=n*(n-1)/2+1;
		else res=r*(r+1)/2;
		cout<<res<<endl;
	}
	return 0;
}

2021新年快乐,acmer们!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值