概述
不知道是哪一天突然心血来潮想做做题目了,so,来到了CODEFORCES做题目试试。
首先做的自然是最简单的,也就是A. Theatre Square看了下题目便开始做起来了,感觉没什么难度,但后面问题就出现了。。。。
最初想法:假设在水平上有i个,竖直方向上有j个,那么只要使i*a >= m && j * a >= n,那么(i * j)即为所求。
#include<stdio.h>
int main(void)
{
int m, n, a;
int i = 1, j = 1;
scanf("%d %d %d",&m, &n, &a);
while(i * a <
m)
{
i++;
}
while(j * a < n)
{
j++;
}
printf("%dn", i * j);
return 0;
}
但提交上去却出现了问题(注:我刚开始并不知道CODEFORCES上面可以查看你的错误在哪里,是在后来才发现的,要是早知道就好了)。
然后我就开始看题目了,果然出现的是一般错误(当然,当时只是我的猜测,但事实证明我猜对了),就是取值范围的问题:
The input contains three positive integer numbers in the first line: n, m and a (1 ≤ n, m, a ≤ 109).
也就是说它的n, m, a的取值都可能达到10^9也就是2^30左右,因此想到了使用long类型
#include<stdio.h>
int main(void)
{
long m, n, a;
long i = 1, j = 1;
scanf("%ld %ld %ld",&m, &n, &a);
while(i * a <
m)
{
i++;
}
while(j * a < n)
{
j++;
}
printf("%ldn", i * j);
return 0;
}
但还是发生了错误,那么会是那里发生了错误呢?
脑袋拍一下
哦,应该是在(i * j)越界了,(i * j)的范围应该在10^18次方,那么这个我用什么来表示呢?我记得以前好像有个(long long)的类型,好像就可以表示。
百度搜了一下,还真有,那么,就不客气了。
#include<stdio.h>
int main(void)
{
long m, n, a;
long i = 1, j = 1;
scanf("%ld %ld %ld",&m, &n, &a);
while(i * a <
m)
{
i++;
}
while(j * a < n)
{
j++;
}
printf("%I64dn", (long long)i * j);
return 0;
}
就这样,ok了。(尽管如此,但要注意最后使用的提交是MS C++)。
最后
以上就是坚定白云为你收集整理的CODEFORCES:A. Theatre Square的全部内容,希望文章能够帮你解决CODEFORCES:A. Theatre Square所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复