如题,我是新手,接触OI还没多久,已经把语言基础知识和一些基础算法过了一遍。最近在做题的时候,我越来越频繁的感觉自己在用「做数学题的思路」做OI题。举个例子,P2669 金币,我的做法是这样的:
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int main()
{
int m,s;
float k;
scanf("%f",&k);
m = (int)floor(0.5*(sqrt(1+8*k)-1));
s = m*(m+1)*(2*m+1)/6 + (m+1)*(k-0.5*(m+1)*m);
printf("%d",s);
return 0;
}
我自己做的时候感觉没多难,就按照数学题的思路把公式写进代码里就一遍AC了,但题解里大多用的是循环模拟的思路,这让我感到困惑。在做P1424和更多的题目时也碰到了类似问题。想请教各位:
1.我习惯的这种「直接推出公式再翻译成代码」的思路是否适合OI?在学习的中后期是否会碰到阻碍?
2.如果在做题时使用「做数学的思路」解决而遇到困难,我应该进一步精进数学技巧,还是让自己适应「OI式」的思路?
以上,希望得到各位建议。