NC26213. 小雨的三角形
描述
小雨手上有一个填满了数字的三角形。这个三角形一共有层,其中第
层共有
个数,且第
个数和第
个数均为
。其余的数中,第
个数是上一层中第
个数和第
个数的和。小雨想知道这个三角形第
层到第
层所有数的和,一共有
个询问。
输入描述
第一行两个正整数,表示这个三角形的层数和询问个数。
接下来行,每行两个正整数
,表示一次询问。
输出描述
输出共行,每行一个整数,表示一组询问的答案,对
取模。
示例1
输入:
5 3 1 2 1 5 3 5
输出:
5 83 78
说明:
画出这个三角形:Python(2.7.3) 解法, 执行用时: 24ms, 内存消耗: 3044K, 提交时间: 2019-07-20 16:01:38
n, m = map(int, raw_input().split()) rec = [] for i in range(m): x, y = map(int, raw_input().split()) rec.append((x, y)) mod = (10**9+7) def getAns(x, y): return (3*(2**x)*(2**(y-x)-1) + 2*(x-y))%mod for i in range(m): print(getAns(rec[i][0]-1, rec[i][1]))
C++11(clang++ 3.9) 解法, 执行用时: 11ms, 内存消耗: 488K, 提交时间: 2020-02-26 10:49:53
#include<stdio.h> const int p=1e9+7; int a[3005]; int main() { int n,m,b,c; a[1]=1; scanf("%d%d",&n,&m); for(int i=2;i<=n;i++) a[i]=(a[i-1]*2+2)%p; while(m--) { int ans=0; scanf("%d%d",&b,&c); for(int i=b;i<=c;i++) (ans+=a[i])%=p; printf("%d\n",ans); } }
Python3(3.5.2) 解法, 执行用时: 53ms, 内存消耗: 4192K, 提交时间: 2019-07-12 21:12:56
n,m=map(int,input().split()) M=int(1e9+7) for _ in range(m): x,y=map(int,input().split()) print((3*(2**y-2**(x-1))+2*(x-y)-2)%M)