10.3
#include<iostream> using namespace std; long long f(long long x,long long y,long long a,long long b,long long c,long long d,long long e) { return a*x*x + b*x + c*y*y + d*y + e; } int main() { int T; cin >> T ; for (int i=0;i<T;i++) { long long n,m; cin >>n >>m; long long a,b,c,d,e; cin >> a >> b >> c >> d >> e; long long sum_min = f(-n+1,-m+1,a,b,c,d,e) ; for (long long x = -n+1;x<n; x++) { for (long long y = -m+1;y<m; y++) { long long sum = f(x,y,a,b,c,d,e); if(sum <= sum_min) { sum_min = sum; } } } cout << sum_min <<endl; } return 0; }
刚开始做题,发现真正能让水平提升的不是去做一个一个的题,更多的还是要不断地找bug,去把自己的逻辑改成电脑的逻辑,对着每一行代码去尝试用电脑的逻辑顺下去,看看自己到底写了个什么玩意。
上图这个题我开始定义x,y,a,b,c,d都是用的int,只有sum_min用的是long long,程序也一直没有报错,但是后续在跟学长沟通时被告知int相乘是先出来结果然后再把结果改成long long,所以结果一大就会在运算的过程中爆int,而且最初给sum_min赋值为0,网站验证的时候可能给的答案会是大于零的,导致我后面的判断一直错误,最后也会输出一个错误的结果。
然后就是一些细节的地方要注意,比如说每一行后面看看需不需要加“;”之类的问题,我在刚开始写代码的时候经常会忘记在定义完一个未知数后加上“;”。