Coming up with a great solution :-)
For....
https://www.hackerrank.com/contests/codestorm/challenges/ilia
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define N 1000100
ll a[N];
map<ll,ll> mp1;
int main(){
ll n,p,q,r,s=0,rt=0,ac=0,ob=0;
memset(a,0,sizeof(a));
cin >> n;
for(int A_i = 0;A_i < n;A_i++){
cin >> a[A_i];
mp1[a[A_i]]++;
}
a[n]=INT_MAX;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
p=lower_bound(a+j+1,a+n+1,(a[i]+a[j]))-a;
q=a[i]*a[i]+a[j]*a[j];
if((ll)sqrt(q)*(ll)sqrt(q)==q){
r=sqrt(q);
if(mp1[r]==1)
rt++;
}
if(j+1>=p) continue;
if((ll)sqrt(q)*(ll)sqrt(q)==q)
s=lower_bound(a+j+1,a+p,(ll)sqrt(q))-a;
else
s=lower_bound(a+j+1,a+p,(ll)sqrt(q)+1)-a;
if(s>j+1) ac+=(s-(j+1));
if(a[s]==(ll)sqrt(q) && (ll)sqrt(q)*(ll)sqrt(q)==q)
ob+=(p-s-1);
else
ob+=(p-s);
}
}
cout<<ac<<" "<<rt<<" "<<ob;
mp1.clear();
// your code goes here
return 0;
}
For....
https://www.hackerrank.com/contests/codestorm/challenges/ilia
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define N 1000100
ll a[N];
map<ll,ll> mp1;
int main(){
ll n,p,q,r,s=0,rt=0,ac=0,ob=0;
memset(a,0,sizeof(a));
cin >> n;
for(int A_i = 0;A_i < n;A_i++){
cin >> a[A_i];
mp1[a[A_i]]++;
}
a[n]=INT_MAX;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
p=lower_bound(a+j+1,a+n+1,(a[i]+a[j]))-a;
q=a[i]*a[i]+a[j]*a[j];
if((ll)sqrt(q)*(ll)sqrt(q)==q){
r=sqrt(q);
if(mp1[r]==1)
rt++;
}
if(j+1>=p) continue;
if((ll)sqrt(q)*(ll)sqrt(q)==q)
s=lower_bound(a+j+1,a+p,(ll)sqrt(q))-a;
else
s=lower_bound(a+j+1,a+p,(ll)sqrt(q)+1)-a;
if(s>j+1) ac+=(s-(j+1));
if(a[s]==(ll)sqrt(q) && (ll)sqrt(q)*(ll)sqrt(q)==q)
ob+=(p-s-1);
else
ob+=(p-s);
}
}
cout<<ac<<" "<<rt<<" "<<ob;
mp1.clear();
// your code goes here
return 0;
}
No comments:
Post a Comment