| ||||||||||
| 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 | |||||||||
AC代码附上 注意!!!!一定要注意左右交点的求解!!!要使用二元一次方程的求和公式求解左右交点,因为精度很重要!!!!//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
int n,d;
int x,y;
int num=0,ans,flag;
const int maxn=1005;
typedef double db;
typedef pair<db,db> pdd;
pdd ils[maxn];
bool cmp(pdd a,pdd b){
if(a.first!=b.first) return a.first<b.first;
else return a.second>b.second;
}
void solve(){
if(flag){
printf("Case %d: -1\n",num);
//cout<<"Case "<<num<<": -1"<<'\n';
return;
}
sort(ils+1,ils+1+n,cmp);
db nowl,nowr,nextl,nextr;
nowl=ils[1].first;
nowr=ils[1].second;
ans++;
for(int i=2;i<=n;i++){
nextl=ils[i].first;
nextr=ils[i].second;
if(nextl>nowr){
nowl=nextl,nowr=nextr;
ans++;
}
else{
nowl=max(nowl,nextl);
nowr=min(nowr,nextr);
}
}
printf("Case %d: %d\n",num,ans);
//cout<<"Case "<<num<<": "<<ans<<'\n';
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
while(cin>>n>>d&&(n||d)){
num++;
flag=ans=0;
for(int i=1;i<=n;i++){
cin>>x>>y;
db a,b,c;
a=1;b=-2*x;c=x*x+y*y-d*d;
ils[i].first=(-b-sqrt(b*b-4*a*c))/2*a;
ils[i].second=(-b+sqrt(b*b-4*a*c))/2*a;
if((b*b-4*a*c)<0||d<=0||y<0) flag=1;
}
solve();
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator