博客
关于我
解方程
阅读量:282 次
发布时间:2019-03-03

本文共 2603 字,大约阅读时间需要 8 分钟。

哈希解法:

#include 
#include
#include
#define ll long longusing namespace std;const int maxn=1e6+7;int hash1[maxn],hash2[maxn];int main(int argc, char** argv) { int a,b,c,d; while(~scanf("%d%d%d%d",&a,&b,&c,&d)){ if((a>0&&b>0&&c>0&&d>0)||(a<0&&b<0&&d<0&&c<0)){ printf("0\n"); continue; } int ans=0; memset(hash1,0,sizeof(hash1)); memset(hash2,0,sizeof(hash2)); for(int i=1;i<=100;++i){ for(int j=1;j<=100;++j){ int x=a*i*i+b*j*j; if(x>=0) hash1[x]++; else hash2[-x]++; } } for(int i=1;i<=100;++i){ for(int j=1;j<=100;++j){ int x=c*i*i+d*j*j; if(x>0) ans+=hash2[x]; else ans+=hash1[-x]; } } printf("%d\n",ans*16); } return 0;}

二分能用stl的就哟个stl,自己写容易炸

二分解方程

#include
using namespace std;const int N = 1e5 + 9;int x[N], y[N];int a, b, c, d;int main(){ while(~scanf("%d %d %d %d", &a, &b, &c, &d)) { if(a>0&&b>0&&c>0&&d>0 || a<0&&b<0&&c<0&&d<0) { cout << "0\n";continue; } long long ans = 0; int cnt = 0; for(int i = 1; i <= 100; ++i) for(int j = 1; j <= 100; ++j) x[cnt] = a*i*i + b*j*j, y[cnt++] = c*i*i + d*j*j; sort(x,x+cnt); sort(y,y+cnt); for(int i = 0; i < cnt; ++i) { int l = 0, r = cnt - 1; while(l < r) { int mid = (l + r) / 2; if(x[i] + y[mid] < 0) l = mid + 1; else r = mid; } long long tmp = 0; if(x[i] + y[r] == 0) { ++tmp; int k = r-1; while(y[k] == y[r] && k >= 0) --k,++tmp; k = r + 1; while(y[k] == y[r] && k < cnt) ++k, ++tmp; ans += tmp; while(x[i] == x[i+1] && i+1 < k) ans+=tmp, ++i; } } printf("%lld\n",ans<<4); // ans是4个数全部正的情况 // 4个数可正可负 , 2的4次方 } return 0;}

#include
using namespace std;const int N = 1e7 + 9;int x[N], y[N];int main(){ int t, n, k; cin >> t; while(t--) { long long ans = 0; int cnt = 0; cin >> n >> k; for(int i = -n; i <= n; ++i) for(int j = -n; j <= n; ++j) x[cnt] = i * i + i + j * j + j, y[cnt++] = k * (i * i + i + j * j + j); sort(x,x+cnt); sort(y,y+cnt); //for(int i = 0; i < cnt; ++i) cout << x[i] << " ";cout << endl; //for(int i = 0; i < cnt; ++i) cout << y[i] << " ";cout << endl; for(int i = 0; i < cnt; ++i) { int pos = lower_bound(y,y+cnt, x[i]) - y; if(pos == cnt) { while(x[i] == x[i+1]) ++i;continue; } long long tmp = 0; if(y[pos] == x[i]) { ++tmp; int k = pos - 1; while(y[pos] == y[k] && k >= 0) --k, ++tmp; k = pos + 1; while(y[pos] == y[k] && k < cnt) ++k, ++tmp; ans += tmp; while(x[i] == x[i+1]) ans += tmp, ++i; } } cout << ans << endl; } return 0;}/*31 11 21 3*/

转载地址:http://twfm.baihongyu.com/

你可能感兴趣的文章
redis报错(error) NOAUTH Authentication required.解决办法
查看>>
对象和封装
查看>>
【树形dp】P1273 有线电视网
查看>>
【分层图最短路】P4568 [JLOI2011]飞行路线
查看>>
【最短路】P4408 [NOI2003]逃学的小孩
查看>>
2020C证(安全员)模拟考试题及C证(安全员)模拟考试系统
查看>>
2020电工(初级)考试及电工(初级)考试软件
查看>>
2020N1叉车司机模拟考试题库及N1叉车司机复审模拟考试
查看>>
2020熔化焊接与热切割考试及熔化焊接与热切割考试题库
查看>>
2020年G3锅炉水处理报名考试及G3锅炉水处理考试申请表
查看>>
2020年制冷与空调设备运行操作答案解析及制冷与空调设备运行操作考试总结
查看>>
2020年保育员(初级)考试资料及保育员(初级)新版试题
查看>>
2020年茶艺师(高级)考试内容及茶艺师(高级)考试申请表
查看>>
2021年烟花爆竹经营单位安全管理人员考试及烟花爆竹经营单位安全管理人员考试试卷
查看>>
2021年过氧化工艺试题及答案及过氧化工艺考试平台
查看>>
2021年重氮化工艺考试题库及重氮化工艺考试报名
查看>>
2021年车工(高级)考试总结及车工(高级)试题及答案
查看>>
2021年压力焊证考试及压力焊实操考试视频
查看>>
2021年低压电工考试及低压电工考试申请表
查看>>
2021年低压电工考试及低压电工考试申请表
查看>>