列表

详情


NC17510. 洋灰三角

描述

    洋灰是一种建筑材料,常用来筑桥搭建高层建筑,又称,水泥、混凝土。
    WHZ有很多铸造成三角形的洋灰块,他想把这些洋灰三角按照一定的规律放到摆成一排的n个格子里,其中第i个格子放入的洋灰三角数量是前一个格子的k倍再多p个,特殊地,第一个格子里放1个。
    WHZ想知道把这n个格子铺满需要多少洋灰三角。

输入描述

第一行有3个正整数n,k,p。

输出描述

输出一行,一个正整数,表示按照要求铺满n个格子需要多少洋灰三角,由于输出数据过大,你只需要输出答案模1000000007(1e9+7)后的结果即可。

示例1

输入:

3 1 1

输出:

6

说明:

洋灰三角铺法:1 2 3,总计6个

示例2

输入:

3 2 2

输出:

15

说明:

洋灰三角铺法:1 4 10,总计15个

示例3

输入:

3 3 3

输出:

28

说明:

洋灰三角铺法:1 6 21,总计28个

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 504K, 提交时间: 2019-07-10 19:01:22

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=1000000007;
ll quick(ll a,ll b)
{
	ll s=1;
	while(b)
	{
		if(b&1)
		s=(s*a)%mod;
		a=(a*a)%mod;
		
		b=b/2;
	}
	return s;
	
	
}
int main()
{
	ll n,k,p,s;
	scanf("%lld %lld %lld",&n,&k,&p);
	if(k==1)
	s=(2*1+(n-1)*p)*n%mod*(quick(2,mod-2))%mod;
	else
	s=(((quick(k,n)-1)*(k-1+p))%mod+mod-n*p*(k-1)%mod)%mod*(quick((k-1)*(k-1),mod-2))%mod;
	printf("%lld",s);
	
	
 } 

C++ 解法, 执行用时: 3ms, 内存消耗: 468K, 提交时间: 2021-07-26 10:20:02

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define P 1000000007
int n,k,p,i;
int Pow(int x,int y)
{
	int s=1;
	for(;y;y>>=1,x=(ll)x*x%P)if(y&1)s=(ll)s*x%P;
	return s;
}
int main()
{
	cin>>n>>k>>p;
	i=Pow(k-1,P-2);
		cout<<((1+(ll)p*i)%P*(Pow(k,n)-1)%P*i-(ll)p*n%P*i%P+P)%P<<endl;
	
	return 0;
}

上一题