Codeforces Round #654 (Div. 2) [B - Magical Calendar] 题解

[原题传送门]

题意

Alice有很多种日历,这些日历的不同之处在于一周的天数不一样(即日历的宽度不同),Alice想要从日历的某一天开始用记号笔连续画n天,而她拥有宽度1r的日历,且每一种都有无穷本,请问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;
        }
    }
}

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值