ZJU 1101 Gamblers
分析:发现自己的理解能力真的有待提高,一条简单搜索,却一些重点东西没注意到。
Code
#include <iostream>
#include <vector>
using namespace std;
long long gambler[1001];
long long vec[1001];
int cmp(const void* l,const void* r)
{ return *(long long*)r-*(long long*)l; }
bool BinarySearch(const int begin,const int end,const long long t)
{
if(begin>end)
return false;
int mid = (begin+end)/2;
if(vec[mid] == t)
return true;
if(t>vec[mid])
return BinarySearch(begin,mid-1,t);
else
return BinarySearch(mid+1,end,t);
}
int main()
{
int n,size;
while(cin>>n,n)
{
size=0;
for(int i=0;i<n;++i)
cin>>gambler[i];
if(n<4)
{ cout<<"no solution"<<endl; continue; }
qsort(gambler,n,sizeof(long long),cmp);
for(int i=0;i<n;++i)
if(i==0 || !BinarySearch(0,size-1,gambler[i]))
vec[size++] = gambler[i];
long long winner;
bool found=false;
for(int begin1=0;begin1<size-1 && !found;++begin1)
for(int begin2=0;begin2<size-1 && !found;++begin2)
{
if(begin1 == begin2)
continue;
for(int begin3=0;begin3<size-1 && !found;++begin3)
{
if(begin1 == begin3 || begin2 == begin3)
continue;
long long temp=vec[begin1]-vec[begin2]-vec[begin3];
if(BinarySearch(0,size-1,temp))
{
winner = vec[begin1];
found = true;
}
}
}
if(found)
cout<<winner<<endl;
else
cout<<"no solution"<<endl;
}
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
long long gambler[1001];
long long vec[1001];
int cmp(const void* l,const void* r)
{ return *(long long*)r-*(long long*)l; }
bool BinarySearch(const int begin,const int end,const long long t)
{
if(begin>end)
return false;
int mid = (begin+end)/2;
if(vec[mid] == t)
return true;
if(t>vec[mid])
return BinarySearch(begin,mid-1,t);
else
return BinarySearch(mid+1,end,t);
}
int main()
{
int n,size;
while(cin>>n,n)
{
size=0;
for(int i=0;i<n;++i)
cin>>gambler[i];
if(n<4)
{ cout<<"no solution"<<endl; continue; }
qsort(gambler,n,sizeof(long long),cmp);
for(int i=0;i<n;++i)
if(i==0 || !BinarySearch(0,size-1,gambler[i]))
vec[size++] = gambler[i];
long long winner;
bool found=false;
for(int begin1=0;begin1<size-1 && !found;++begin1)
for(int begin2=0;begin2<size-1 && !found;++begin2)
{
if(begin1 == begin2)
continue;
for(int begin3=0;begin3<size-1 && !found;++begin3)
{
if(begin1 == begin3 || begin2 == begin3)
continue;
long long temp=vec[begin1]-vec[begin2]-vec[begin3];
if(BinarySearch(0,size-1,temp))
{
winner = vec[begin1];
found = true;
}
}
}
if(found)
cout<<winner<<endl;
else
cout<<"no solution"<<endl;
}
return 0;
}