A题题解
题目意思已经很清楚了,直接讲解思路吧。
首先瞟一眼数据范围,
那具体如何实现呢?
对于
那么还有个要将解决的问题,这个情况总数该如何求取?
经过思考,我们不难发现每一种可能的值至少有
这样子这题就算解决了。
多一嘴,别忘了开 long long。
CODE:
#include<bits/stdc++.h>
#define int long long//不开longlong见祖宗
using namespace std;
const int mod=1e9+7;
int n,m,p,f[1010][1010],cnt1[1010],cnt2[1010],ans;
signed main()
{
cin>>n>>m>>p;
for(int i=0;i<p;i++)
{
for(int j=0;j<p;j++)
{
f[i][j]=i*j%p;//先预处理一下结果,其实不处理也没关系,不过这样后面代码会不那么shishan
}
}
for(int i=0;i<p;i++)
{
cnt1[i]+=n/p%mod,cnt2[i]+=m/p%mod;
if(n/p*p+i<=n)
{
cnt1[i]++;
}
if(m/p*p+i<=m)
{
cnt2[i]++;
}//情况统计,理由见上方
}
for(int i=0;i<p;i++)
{
for(int j=0;j<p;j++)
{
ans+=cnt1[i]*cnt2[j]%mod*f[i][j]%mod;//针对每种情况乘以结果
}
}
cout<<ans%mod;
return 0;
}
//抄袭题解这个习惯不好哦