这道题其实很简单,只需要分别对n/a和m/a向上取整即可。但是一开始我选择使用遍历法,最终没想到TLE了:
//CF1A题-version1-TLE
#include <iostream>
using namespace std;
int main()
{
float n,m,a; //这里为什么用float类型,是因为如果用int类型,for循环有问题
int b1,b2;
cin>>n>>m>>a;
for (b1=1;b1<(n/a);b1++) {} //这里的空语句还是需要的
for (b2=1;b2<(m/a);b2++) {}
cout<<(b1*b2);
return 0;
}
接着我又想到,为什么不能直接求呢!还要这么麻烦遍历干什么?所以我就把遍历给更换了...
//CF1A题-version2-WA
#include <iostream>
using namespace std;
int main()
{
int n,m,a;
int b1,b2;
cin>>n>>m>>a;
if (n%a==0) b1=n/a;
if (n%a!=0) b1=n/a+1;
if (m%a==0) b2=m/a;
if (m%a!=0) b2=m/a+1;
cout<<(b1*b2);
return 0;
}
好吧,最后还是WA了...我百思不得其解,到底是哪里出了问题!直到看到WA的案例,我才知道可能是内存不够,所以最后WA了,然后赶忙换成了long long
//CF1A题-version3-UE
#include <iostream>
using namespace std;
int main()
{
long long n,m,a,b1,b2;
cin>>n>>m>>a;
if (n%a==0) b1=n/a;
if (n%a!=0) b1=(n-(n%a))/a+1; //可以但是没必要
if (m%a==0) b2=m/a;
if (m%a!=0) b2=(m-(m%a))/a+1;
cout<<(b1*b2);
return 0;
}
UE...这个问题出现的我更加摸不着头脑了,既没有超限,也没有WA,那到底是哪里Error了呢!后来我仔细看了看,问题就出现在if (n%a!=0) b1=(n-(n%a))/a+1;这一行,其实没必要去减掉这个余数然后做除法,毕竟是整型嘛,直接来!所以经历了千辛万苦,终于把这道很简单的题目给写好了!!AC了!!
//CF1A题-version4-AC
#include <iostream>
using namespace std;
int main()
{
long long n,m,a,b1,b2; //要定义成long long,本身就是整型
cin>>n>>m>>a;
if (n%a==0) b1=n/a;
if (n%a!=0) b1=n/a+1;
if (m%a==0) b2=m/a;
if (m%a!=0) b2=m/a+1;
cout<<(b1*b2);
return 0;
}