コード例 #1
0
ファイル: 536-C.cpp プロジェクト: a00012025/Online_Judge_Code
void convex_hull(poly &v,poly &p)
{
    p.clear() ;
    sort(v.begin(),v.end()) ;
    v.resize(unique(v.begin(),v.end())-v.begin()) ;
    int n=v.size() ;
    int sz=0 ;
    for(int i=0;i<n;i++)
    {
        while(sz>=2 && dcmp(cross(st[sz-2],st[sz-1],v[i]))<0)
            sz-- ;
        st[sz++]=v[i] ;
    }
    for(int i=0;i<sz;i++) p.push_back(st[i]) ;

    sz=0 ;
    for(int i=0;i<n;i++)
    {
        while(sz>=2 && dcmp(cross(st[sz-2],st[sz-1],v[i])>0))
            sz-- ;
        st[sz++]=v[i] ;
    }
    for(int i=sz-1;i>=0;i--)
    {
        if(i==sz-1 && st[i]==p.back()) continue ;
        if(i==0 && st[i]==p[0]) continue ;
        p.push_back(st[i]) ;
    }
}
コード例 #2
0
ファイル: b.cpp プロジェクト: tzupengwang/PECaveros
void read( poly& pp , string ss , LL mod ){
  pp.clear();
  if( ss[ 0 ] != '-' ) ss = '+' + ss;
  size_t st = 0;
  while( st < ss.length() ){
    size_t lst = st;
    st ++;
    while( st < ss.length() and
           ss[ st ] != '+' and
           ss[ st ] != '-' ) st ++;
    pp.push_back( parse( ss , lst , st , mod ) );
  }
}
コード例 #3
0
ファイル: Deer_proof_fence_4450.cpp プロジェクト: jdumas/acm
int main(void) {
	int x, y, i, k = 0;
	point p;
	while (1) {
		cin >> n >> m;
		if (n == 0 && m == 0) break;
		saplings.clear();
		for (i = 0; i < n; ++i) {
			cin >> x >> y;
			p = point(x,y);
			saplings.push_back(p);
		}
		printf("Case %d: length = %.2f\n", ++k, solve());
	}
	return 0;
}
コード例 #4
0
ファイル: wto.cpp プロジェクト: vipulharsh/Coding
int main(){
	X.push_back(0);
	X.push_back(1);

	str=new char[101];
	int t;

	readint(t);
	while(t--){
		scanf("%s",str);
		ptr=0;
		poly res=solve();
		printpoly(res);
		printf("%.19Lf\n",integrate(res));
	}
	return 0;
}
コード例 #5
0
ファイル: Deer_proof_fence_4450.cpp プロジェクト: jdumas/acm
void convex_hull(poly & t, poly & r) {
	unsigned i;
	Compare order;
	// Search leftmost vertex
	order.p0 = t[0];
	for (i = 1; i < t.size(); ++i)
		if (t[i].real() < order.p0.real())
			order.p0 = t[i];
	sort(t.begin(), t.end(), order);
	for (i = 0; i < t.size(); ++i) {
		r.push_back(t[i]);
		// Pop vertices that become internal
		while (r.size() > 3u && angle(r.end()[-3], r.end()[-2], r.end()[-1])) {
			r.end()[-2] = r.back();
			r.pop_back();
		}
	}
	return;
}
コード例 #6
0
ファイル: 536-C.cpp プロジェクト: a00012025/Online_Judge_Code
main()
{
    int n ; scanf("%d",&n) ;
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&x[i],&y[i]) ;
        a.push_back((pt){mul/x[i],mul/y[i]}) ;
    }
    convex_hull(a,b) ;
    for(int i=0;i<b.size();i++)
    {
        if(i && dcmp(b[i-1].y-b[i].y)<=0) break ;
        int x0=int(mul/b[i].x+0.5) , y0=int(mul/b[i].y+0.5) ;
        ans.insert((pii){x0,y0}) ;
    }
    for(int i=1;i<=n;i++) if(ans.count((pii){x[i],y[i]}))
        printf("%d ",i) ;
    printf("\n") ;
}