题目链接:http://acm.scu.edu.cn/soj/problem/4440/
题目大意:给一个n*m的方格,求周长小于等于k的矩形有多少个。
解题思路:我之前直接暴力,显然超时,所以后来发现,可以用等差数列的求前n项和公式来代替一层for循环,这样就只有一重循环了,不会超时。
AC代码:
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std; int main()
{
int n,m,k;
long long sum;
while(scanf("%d%d%d",&m,&n,&k)!=EOF)
{
sum=;
int c=*(m+n);
if(c<=k) sum=(long long)n*(n+)*m*(m+)/;
else
{
for(int i=;i<=m;i++)
{
int j=(k-*i)/;
if(j>&&j<=n)
{
sum+=(long long)(n+n-j+)*j/*(m-i+);
}
else
if(j>n)
sum+=(long long)(n+)*n/*(m-i+);
}
}
printf("%lld\n",sum);
}
return ;
}