NC17510. 洋灰三角
描述
输入描述
第一行有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; }