976
社区成员
发帖
与我相关
我的任务
分享
这是我参加朝闻道知识分享大赛的第29篇文章.
前面几题懒得写了,赛时莫名其妙就过去了
x+y=a,xy=b 可以转换为二元一次方程 x^2-ax+b=0 ,解方程就行
第一发交,cf居然提示我哪里可能错了,真的哭死,要是自己找错肯定又要找半天T.T,最近总是乘法爆long long爆 int
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define _cf() int _;cin>>_;while(_--)
const int N = 2e6;
const int inf = 2147483647;
void Solve()
{
int n;
cin>>n;
ll x;
map<ll,ll> vis;
for(int i=1;i<=n;i++) cin>>x,vis[x]++;
int m;cin>>m;
long double a,b;
while(m--)
{
ll res=0;
cin>>a>>b;
long double x1=(a+sqrt(a*a-4*b))/2;
long double x2=(a-sqrt(a*a-4*b))/2;
if(x1==(int)x1)
{
int y1=a-x1;
if(x1==y1) res+=vis[x1]*(vis[x1]-1)/2;
else res+=vis[x1]*vis[y1];
// cout<<"x1="<<x1<<" y1="<<y1<<endl;
}
if(x1!=x2&&x2==(int)x2)
{
int y2=a-x2;
if(y2!=x1){
if(x2==y2) res+=vis[x2]*(vis[x2]-1)/2;
else res+=vis[x2]*vis[y2];
}
// cout<<"x2="<<x2<<" y2="<<y2<<endl;
}
cout<<res<<" ";
// cout<<vis[2]<<" "<<vis[3]<<endl;
}
cout<<endl;
}
int main()
{
IOS;
_cf()
Solve();
}