Content

在大小为 \(n\) 的数字三角形中,第 \(i\) 行包含有 \(i\) 个数字,数字从上到下,从左到右依次排列为 \(1,2,3,\dots\)。

设第 \(i\) 行第 \(j\) 个数字为 \((i,j)\),则我们可以从 \((i,j)\) 走到 \((i+1,j)\) 或 \((i+1,j+1)\),也可以从 \((i+1,j)\) 或 \((i+1,j+1)\) 走到 \((i,j)\)。

现在请求出连续走过 \(k\) 个不同的数字时,走过的 \(k\) 个数字的和最大可以达到多少。答案对 \(10^9+7\) 取模。

数据范围:\(t\) 组询问,\(1\leqslant t\leqslant 10^5\),\(1\leqslant\frac{k+1}2\leqslant n\leqslant 10^9\)。

Solution

这里直接讲正解。

样例说明纯粹是来误导你的,真正使数字和最大的方案应该是从右下角,也就是 \((n,n)\) 开始走起,不断地先往右上走,再往右下走这么重复,一直走到 \(k\) 步为止。

注意到数据范围中 \(\frac{k+1}2\leqslant n\),因此我们这么走一定不会有走到 \((n,1)\) 还要走的情况出现。因此很容易得知对答案能够产生贡献的只有可能是在倒数第二行和最后一行的这些数字中。

然后我们分 \(k\) 的奇偶性讨论。

如果 \(k\) 是偶数,那么我们所走过的数字一定是最后一行从 \((n,n)\) 开始往左数连续的 \(\frac k2\) 个数字和倒数第二行从 \((n-1,n-1)\) 往左数连续的 \(k\) 个数字。答案就是 \(\sum\limits_{i=n-\frac k2+1}^n i+\sum\limits_{i=n-\frac k2}^{n-1}i\)。

但是注意到我们的 \(n\) 是 \(10^9\) 级别的,所以利用等差数列求和公式简化一下这个式子,就是 \(\dfrac{(n-\frac k2+1+n)\frac k2}2+\dfrac{(n-\frac k2+n-1)\frac k2}2\)。为了方便理清思路,你可以像我接下来给出的代码那样将答案分成两部分计算,然后到最后再一起相加。

如果 \(k\) 是偶数,那么我们发现,这种情况下的答案相比于 \(k-1\) 时的答案多了一个 \((n,n-\frac k2)\)。答案就是 \(\sum\limits_{i=n-\frac k2}^n i+\sum\limits_{i=n-\frac k2}^{n-1} i\)。同样地,将它进行化简可以得到答案为 \(\dfrac{(n-\frac k2+n)(\frac k2+1)}2+\dfrac{(n-\frac k2+n-1)\frac k2}2\)。

那么这道题目就做完了。

Code

namespace Solution {
const ll mod = 1e9 + 7;
int n, k; ill ksm(ll a, ll b = mod - 2) {
ll res = 1;
for(; b; b >>= 1, a = a * a % mod)
if(b & 1) res = res * a % mod;
return res;
} iv Main() {
MT {
read(n, k);
ll start = 1ll * n * (n + 1) / 2, start2 = start - n;
if(!(k % 2)) {
ll ans1 = (start - k / 2 + 1 + start + mod) % mod * (k / 2) % mod * ksm(2) % mod; //(a^(p-1)) mod p=1
ll ans2 = (start2 - k / 2 + 1 + start2 + mod) % mod * (k / 2) % mod * ksm(2) % mod;
println((ans1 + ans2) % mod);
} else {
ll ans1 = (start - k / 2 + start + mod) % mod * (k / 2 + 1) % mod * ksm(2) % mod;
ll ans2 = (start2 - k / 2 + 1+ start2 + mod) % mod * (k / 2) % mod * ksm(2) % mod;
println((ans1 + ans2) % mod);
}
}
return;
}
}

洛谷八月月赛 II T1 题解的更多相关文章

  1. 洛谷八月月赛 II T2 题解

    Content 现有 \(T\) 次询问. 每次询问给定一个长度为 \(n\) 的 01 串,记为 \(A\).回答应是一个字符串 \(B\),满足: \(B\) 是长度为 \(m\) 的 01 串. ...

  2. 洛谷八月月赛Round1凄惨记

    个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...

  3. 洛谷九月月赛II

    题解:模拟 一旦不匹配就要break #include<iostream> #include<cstdio> #include<cstring> #include& ...

  4. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  5. 洛谷P4047 [JSOI2010]部落划分题解

    洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...

  6. 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)

    洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...

  7. 洛谷五月月赛【LGR-047】划水记

    虽然月赛有些爆炸,但我永远资瓷洛谷! 因为去接水,所以迟到了十几分钟,然后洛谷首页就打不开了-- 通过洛谷题库间接打开了比赛,看了看\(TA\),WTF?博弈论?再仔细读了读题,嗯,判断奇偶性,不过要 ...

  8. [洛谷P1823]音乐会的等待 题解(单调栈)

    [洛谷P1823]音乐会的等待 Description N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没 ...

  9. BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解

    +++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...

随机推荐

  1. 【JQuery】(1)JQuery基础

    JQuery基础 2019-11-02  21:11:17  by冲冲 1.jQuery简介 jQuery:轻量级."写的少,做的多".JavaScript函数库. 2.jQuer ...

  2. gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)

    前言   Excel功能强大,应用广泛.随着web应用的兴起和完善,用户的要求也越来越高.很多Excel的功能都搬到了sass里面.恨不得给他们做个Excel出来...程序员太难了... 去年我遇到了 ...

  3. js数组常用添加方法有两种

        //头部     //this.list.unshift({name:this.itemName,date:new Date()});     //尾部         this.list.p ...

  4. spring security 认证源码跟踪

    spring security 认证源码跟踪 ​ 在跟踪认证源码之前,我们先根据官网说明一下security的内部原理,主要是依据一系列的filter来实现,大家可以根据https://docs.sp ...

  5. Harbour.Space Scholarship Contest 2021-2022 题解

    多好的上分机会啊,要是换个时间(指改在 NOI 之后)我说不定就能上 2500 了(做白日梦 ing) A 签到题不多说,显然只有末尾为 \(9\) 的数是 interesting 的,因此答案就是 ...

  6. C++中的字符串输入getline

    http://www.cnblogs.com/wanghao111/archive/2009/09/05/1560822.html 1 #include <iostream> 2 #inc ...

  7. CPU如何同时运行多个进程?

    1 # -*- coding: utf-8 -*- 2 import re 3 mem = [x for x in re.split('[\r|\n]', ''' 4 store a 1 5 add ...

  8. A Child's History of England.40

    Excommunication was, next to the Interdict I told you of at the close {end} of the last chapter, the ...

  9. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(六)-FatFs使用的思路介绍

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

  10. 【Android】安装插件 + 改变文字大小、颜色 + 隐藏代码区块的直线

    安装插件 可以在搜寻框里面填入关键字搜寻,具体的插件,网上有很多介绍了 改变文字大小.颜色 隐藏代码区块的直线