青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

oyjpArt ACM/ICPC算法程序設計空間

// I am new in programming, welcome to my blog
I am oyjpart(alpc12, 四城)
posts - 224, comments - 694, trackbacks - 0, articles - 6

SRM401 550 PTS ParticleCollision

Posted on 2008-05-07 02:32 oyjpart 閱讀(2232) 評論(0)  編輯 收藏 引用 所屬分類: ACM/ICPC或其他比賽

Problem Statement

    

Particles (which can be considered points in 3D-space for the purposes of the problem) can move in an electro-magnetic field. If a particle is charged, its trajectory can be described as spiral, and if it is uncharged, it is just a straight line. Given two particles (one charged and one uncharged) it should be determined whether they can possibly collide or not. Two particles can possibly collide if and only if their trajectories intersect.

Some steps have already been made by the physicist to simplify the problem, so the coordinates of the charged particle are represented as follows:

x1 = cos(PI * t)

y1 = sin(PI * t)

z1 = t

and for the uncharged particle:

x2 = vx * t + x0

y2 = vy * t + y0

z2 = vz * t + z0

Here t is a parameter which can be chosen arbitrarily and independently for both trajectories.

Your method will be given 6 integers - vx, vy, vz, x0, y0 and z0, describing the trajectory of the uncharged particle. It should determine whether the two given trajectories intersect or not. If they do, it should return a vector <double> containing exactly 3 elements x, y and z - the coordinates of the point where a collision can happen. If there is more than one such point, it should return a vector <double> containing exactly three zeroes. If collision of the two particles is impossible it should return an empty vector <double>.

Definition

    
Class: ParticleCollision
Method: collision
Parameters: int, int, int, int, int, int
Returns: vector <double>
Method signature: vector <double> collision(int vx, int vy, int vz, int x0, int y0, int z0)
(be sure your method is public)
    

Notes

- PI can be considered equal to 3.14159265358979323846.
- All return values with either an absolute or relative error of less than 1.0E-9 are considered correct.

Constraints

- vx, vy and vz will each be between -10 and 10, inclusive.
- x0, y0 and z0 will each be between -10 and 10, inclusive.

Examples

0)
    
0
0
0
0
0
0
Returns: { }
The second trajectory is a single point (0, 0, 0), which doesn't lie on the first trajectory.
1)
    
2
4
1
-1
-1
0
Returns: {0.0, 1.0, 0.5 }
There is a single intersection point with coordinates (0, 1, 0.5).
2)
    
4
4
2
5
4
0
Returns: {0.0, 0.0, 0.0 }
There are two intersection points.
3)
    
0
0
1
1
0
0
Returns: {0.0, 0.0, 0.0 }
There are infinitely many intersection points.

This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.


要做這道題,要注意很多問題:
1.看清題,題目中說了t是independent
2.解一元二次方程要會吧!系數A,B,C的判定不要漏掉
3.特殊情況下A=B=C什么時候有解考慮清楚

這樣你就可以過題了!!!

#pragma warning ( disable : 4786 )

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <queue>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>

using namespace std;

const double PI = acos(-1.0);

#define sz(x) ((int)(x).size())
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define MAXINT 1000000000
#define EPS 1e-8
#define FOR(a,b,c) for(a=(b);(a)<(c);++(a))
#define REP(a,b) FOR(a,0,b)
typedef vector<int> VI;

inline int dblcmp(double a, double b) {
    if(fabs(a-b) < EPS) return 0;
    return a < b ? -1 : 1;
}

//typedef long long LL;

/*
cos(PI * t1)=vx * t2 + x0
sin(PI * t1)=vy * t2 + y0
t1=vz*t2+z0
*/


class ParticleCollision
{
public:
    int vx, vy, vz, x0, y0, z0;

    bool check(double t2) {
        double x2 = vx * t2 + x0;
        double y2 = vy * t2 + y0;
        double t1 = vz * t2 + z0;

        if(dblcmp(cos(PI * t1), vx * t2 + x0)==0
            && dblcmp(sin(PI * t1),vy * t2 + y0)==0
            && dblcmp(t1,vz*t2+z0)==0)
            return true;
        return false;

    }
    vector <double> collision(int _vx, int _vy, int _vz, int _x0, int _y0, int _z0)
    {
        vz=1;
        vx = _vx;
        vy = _vy;
        vz = _vz;
        x0 = _x0;
        y0 = _y0;
        z0 = _z0;
        vector<double> mul(3, 0.0);
        vector<double> empty;
        int i, j;
        double a = vx*vx + vy*vy;
        double b = 2 * vx * x0 + 2 * vy * y0;
        double c = x0 * x0 + y0 * y0 - 1;
    //    printf("a = %lf b = %lf c = %lf\n", a, b, c);
        double det = b*b-4 * a * c;
        if(dblcmp(a, 0.0) == 0) {
            if(dblcmp(b, 0.0) == 0) {
                if(dblcmp(c, 0.0) == 0) {
                    if(dblcmp(vz, 0.0) == 0) {
                        if(dblcmp(x0, cos(PI * z0)) == 0
                            && dblcmp(y0, sin(PI * z0)) == 0) {
                            vector<double> ret;
                            ret.push_back(x0);
                            ret.push_back(y0);
                            ret.push_back(z0);
                            return ret;
                        }
                    }
                    else return mul;
                }
                return empty;
            }
            double t = -c / b;
            if(check(t)) {
                vector<double> ret;
                ret.push_back(vx * t + x0);
                ret.push_back(vy * t + y0);
                ret.push_back(vz * t + z0);
                return ret;
            }
            return empty;
        }
    //    printf("det = %lf\n", det);
        int x = dblcmp(det, 0);
        if(x == 1) {
            int cnt = 0;
            vector<double> ret;
            for(i = 0; i < 2; ++i) {
                double t;
                if(i == 0) t = (-b - sqrt(det)) / 2 / a;
                if(i == 1) t = (-b + sqrt(det)) / 2 / a;
                
                if(check(t)) {
                    ret.push_back(vx * t + x0);
                    ret.push_back(vy * t + y0);
                    ret.push_back(vz * t + z0);
                    cnt++;
                }
            }
            if(cnt == 0) return empty;
            else if(cnt == 1) return ret;
            else return mul;
        }
        else if( x== -1) return empty;
        else {
            double t = (-b + sqrt(det)) / 2 / a;
            if(check(t)) {
                vector<double> ret;
                ret.push_back(vx * t + x0);
                ret.push_back(vy * t + y0);
                ret.push_back(vz * t + z0);
                return ret;
            }
            return empty;
        }
    }
   
 
};



// Powered by FileEdit
// Powered by TZTester 1.01 [25-Feb-2003]
// Powered by CodeProcessor
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲最新视频在线播放| 最新国产の精品合集bt伙计| 亚洲一区欧美| 国产日韩欧美精品在线| 久久免费黄色| 女同性一区二区三区人了人一| 亚洲国产影院| 日韩午夜免费| 国产日韩欧美一区二区三区在线观看| 久久婷婷影院| 欧美福利专区| 午夜精品视频在线观看一区二区| 欧美在线在线| 亚洲人成网站999久久久综合| 亚洲美女在线观看| 国产日韩欧美一区二区三区四区| 欧美成人免费小视频| 欧美日韩视频在线第一区| 欧美一区二区在线视频| 久久视频在线视频| 亚洲免费精品| 亚洲欧美日韩精品久久奇米色影视| 一区在线免费观看| 亚洲精品激情| 国产麻豆精品视频| 欧美国产精品劲爆| 国产精品草莓在线免费观看| 久久天堂av综合合色| 欧美激情亚洲综合一区| 欧美一区日韩一区| 欧美成人免费一级人片100| 亚洲欧美久久久| 久久视频这里只有精品| 亚洲新中文字幕| 久久久久久伊人| 亚洲午夜免费视频| 久久久欧美一区二区| 一本色道久久精品| 久久国产精品黑丝| 中文在线不卡视频| 久久久噜噜噜久久人人看| 亚洲校园激情| 米奇777超碰欧美日韩亚洲| 午夜精品久久久久久久久久久久| 久久婷婷久久| 欧美一级午夜免费电影| 欧美福利影院| 另类欧美日韩国产在线| 国产精品大片| 欧美韩日一区二区三区| 国产精品亚发布| 91久久精品国产91性色| 韩国成人福利片在线播放| 野花国产精品入口| 亚洲级视频在线观看免费1级| 亚洲欧美www| 日韩一级大片在线| 久久久久久久尹人综合网亚洲| 亚洲一区影音先锋| 欧美成年人网站| 久久美女艺术照精彩视频福利播放| 欧美日韩国产二区| 欧美高清影院| 国精品一区二区| 亚洲一级在线观看| 99精品视频一区| 浪潮色综合久久天堂| 欧美在线高清| 欧美另类在线播放| 亚洲免费观看| 久久久久久国产精品mv| 亚洲欧洲日本专区| 久久精品国产欧美激情| 欧美一区二区三区四区在线观看地址| 欧美日韩国产成人在线观看| 欧美国产大片| 极品日韩av| 亚洲欧美在线另类| 亚洲欧美国产日韩天堂区| 欧美一区二区视频97| 亚洲精品国产精品国自产在线| 欧美专区在线观看一区| 亚洲一区二区三| 国模精品一区二区三区| 欧美日韩国产精品专区| 99pao成人国产永久免费视频| 欧美高清在线一区| 久久久精品国产免费观看同学| 国产精品青草久久| 欧美成人一区二区三区| 亚洲国产一区在线观看| 欧美激情视频给我| 日韩一区二区免费看| 日韩视频一区二区三区| 欧美精品七区| 欧美一区二区黄| 久久婷婷人人澡人人喊人人爽| 极品日韩av| 欧美激情国产高清| 在线视频一区二区| 久久aⅴ国产紧身牛仔裤| 亚洲国产成人一区| 国产欧美日韩综合| 欧美激情欧美激情在线五月| 欧美一级大片在线观看| 久久视频精品在线| 国产美女精品| 西西裸体人体做爰大胆久久久| 欧美性片在线观看| 一区二区三区黄色| 99av国产精品欲麻豆| 国产精品青草综合久久久久99 | 欧美视频在线一区| 亚洲精选在线观看| 久久激情五月激情| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美亚洲自偷自偷| 亚洲激情偷拍| 国产日韩欧美一区二区| 国产精品久久久久免费a∨大胸| 蜜桃av综合| 欧美在线一二三区| 亚洲欧美中文另类| 在线亚洲欧美视频| 亚洲精品黄色| 亚洲国产成人高清精品| 免费一级欧美片在线播放| 欧美亚洲在线视频| 国产啪精品视频| 模特精品裸拍一区| 亚洲国产精品成人| 欧美一区二区在线观看| 亚洲精品欧美极品| 一区精品在线| 狠狠色狠色综合曰曰| 国产视频观看一区| 国产日产欧产精品推荐色| 国产精品99免费看 | 欧美日韩综合久久| 欧美精品自拍| 欧美日韩mp4| 欧美日韩国产色视频| 欧美承认网站| 久久蜜桃精品| 亚洲欧美一级二级三级| 亚洲激情视频在线| 男女精品网站| 久久精品亚洲一区| 久久se精品一区精品二区| 在线亚洲高清视频| 99国产精品久久久久久久成人热 | 欧美国产一区视频在线观看 | 亚洲福利久久| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲欧美国内爽妇网| 99精品久久| 亚洲看片一区| 亚洲精品影院在线观看| 99在线热播精品免费99热| 性亚洲最疯狂xxxx高清| 欧美国产一区二区三区激情无套| 亚洲精品看片| 亚洲日本视频| 日韩午夜电影av| 日韩午夜三级在线| 欧美v日韩v国产v| 亚洲综合国产激情另类一区| 亚洲精品久久久久久久久| 亚洲高清自拍| 亚洲第一中文字幕| 中文高清一区| 麻豆国产精品777777在线 | 中文亚洲欧美| 久久精品视频在线| 欧美日韩国产一区二区三区| 国产亚洲人成网站在线观看| 999亚洲国产精| 免费观看成人| 午夜在线视频观看日韩17c| 欧美久久99| 精品999在线观看| 午夜视频一区二区| 亚洲精品乱码久久久久久日本蜜臀| 欧美一区日韩一区| 欧美亚韩一区| 一区二区三区成人精品| 免费精品视频| 欧美在线观看www| 国产精品v欧美精品v日韩精品| 亚洲精品一区二区三区不| 美脚丝袜一区二区三区在线观看 | 亚洲一本视频| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲午夜在线观看| 国产精品激情偷乱一区二区∴| 亚洲乱码日产精品bd| 欧美激情一区| 欧美xx69| 99xxxx成人网| 日韩视频一区二区三区|