| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
跪求测试用例····两天了... ... 还是WA啊~
为什么啊~~
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
#define MX 100000
double L[MX]; // left end point
double R[MX]; // right end point
int indexs[MX]; //indexes of the order
bool change(double &L,double &R,int d)
{
// currently: L is x, R is y
double x=L;
double y=R;
if(y>d)
return false;
double halfL=sqrt((double)(d*d-R*R));
// now it becomes what it should be
L=x-halfL;
R=x+halfL;
return true;
}
void mySort(int number)
{
if(number<1)
return;
for(int i=1;i<=number;i++)
{
double min=R[i];
int p=i;
for(int j=i+1;j<=number;j++)
{
if(R[j]<min)
{
min=R[j];
p=j;
}
}
if(p!=i)
{
int tmp=indexs[i];
indexs[i]=indexs[p];
indexs[p]=tmp;
}
}
}
int main()
{
int i;
vector<int> v;
while(1)
{
int n,d; //number of islands and radius of radar
cin>>n>>d;
if(0==n&&0==d)
break;
if(0==n)
{
break;
//v.push_back(0);
//continue;
}
if(n<0)
{
v.push_back(-1);
continue;
}
if(d<0)
{
for(i=1;i<=n;i++)
{
cin>>L[i]>>R[i]; //here L means x, R means y --which would be changed at function change()
}
v.push_back(-1);
continue;
}
bool legal=true;
for(i=1;i<=n;i++)
{
cin>>L[i]>>R[i]; //here L means x, R means y --which would be changed at function change()
indexs[i]=i;
if(R[i]<0)
R[i]=-R[i];
if(!change(L[i],R[i],d))
{
v.push_back(-1);
legal=false;
break;
}
}
if(!legal)
continue;
mySort(n);
double point=R[indexs[i]];
int TotalNum=1;
for(i=1;i<=n-1;i++)
{
if(L[indexs[i+1]]>point)
{
TotalNum++;
point=R[indexs[i+1]];
}
}
v.push_back(TotalNum);
}
for(i=0;i<v.size();i++)
{
cout<<"Case "<<i+1<<": "<<v[i]<<endl;
}
return 1;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator