题目
http://bailian.openjudge.cn/practice/1840/
思路
把等式右移三项,遍历左边的两项可能的取值用 map 存下来,遍历右边值而后从map中取出对应个数相加
源码
//
// 1840.cpp
// test
//
// Created by bytedance on 2020/9/8.
// Copyright © 2020 bytedance. All rights reserved.
//
#include <stdio.h>
#include <iostream>
#include <map>
#include <math.h>
using namespace std;
int main(){
int cnt = 0;
map<int,int> m;
int a1,a2,a3,a4,a5;
cin >> a1>>a2>>a3>>a4>>a5;
for(int i = -50;i <= 50;++i){
int res1 = i*i*i*a1;
for(int j = -50;j <= 50;++j){
int res = res1+j*j*j*a2;
if(i==0||j==0)continue;
if(m.find(res)!=m.end()){
m[res]++;
}else{
m[res] = 1;
}
}
}
// for(map<int,int>::iterator it = m.begin();it!=m.end();++it){
// cout <<it->first<<" "<<it->second<<endl;
// }
for(int i = -50;i <= 50;++i){
for(int j = -50;j <=50;++j){
for(int k = -50;k <= 50;++k){
if(i==0||j==0||k==0)continue;
int res = i*i*i*a3+j*j*j*a4+k*k*k*a5;
res = -res;
if(m.find(res)!=m.end()){
cnt+=m[res];
}
}
}
}
cout << cnt;
return 0;
}