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

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>
            欧美电影免费观看网站| 亚洲一区二区在线视频| 一区在线视频| 亚洲免费电影在线观看| 午夜精品在线看| 亚洲第一区在线| 夜夜嗨av色一区二区不卡| 香蕉久久精品日日躁夜夜躁| 欧美成人精品不卡视频在线观看| 亚洲一区尤物| 欧美日韩不卡合集视频| 狠狠色丁香婷婷综合| 亚洲一区免费网站| 午夜精彩国产免费不卡不顿大片| 欧美精品一线| 亚洲国内自拍| 裸体歌舞表演一区二区| 亚洲一区二区三区视频| 国产婷婷成人久久av免费高清| 一区二区三区精密机械公司| 欧美成人精品三级在线观看| 欧美极品在线视频| 亚洲乱码日产精品bd| 99国产精品久久久久久久| 美女脱光内衣内裤视频久久影院 | 亚洲片在线资源| 久久国产精品高清| 国产欧美日本在线| 亚洲欧美综合另类中字| 欧美在线3区| 黑人巨大精品欧美一区二区小视频| 久久久人成影片一区二区三区观看 | 亚洲二区视频在线| 玖玖国产精品视频| 欧美日韩成人在线视频| 久久成人免费| 欧美一级欧美一级在线播放| 国产日韩在线播放| 亚洲人午夜精品| 国产在线精品一区二区夜色| 久久久精品一品道一区| 欧美在线免费观看视频| 一区二区欧美国产| 久久久久国产精品厨房| 亚洲老司机av| 久久国内精品自在自线400部| 一区二区三区免费看| 久久噜噜亚洲综合| 久久久999国产| 国产精品久久久久一区| 久久久综合香蕉尹人综合网| 欧美性一二三区| 久久久久久色| 国产精品综合av一区二区国产馆| 久久精品一区二区三区不卡| 欧美视频中文字幕| 久久久综合网| 国产日韩高清一区二区三区在线| 一本色道88久久加勒比精品 | 国产综合网站| 亚洲一区二区在线播放| 亚洲一区二区不卡免费| 欧美在线观看视频| 校园春色国产精品| 国产精品羞羞答答| 欧美黄色一级视频| 国产精品九色蝌蚪自拍| 麻豆精品精品国产自在97香蕉| 国产精品视频1区| 亚洲五月六月| 亚洲精品免费一二三区| 亚洲欧美成人一区二区三区| 亚洲激情成人| 欧美国产亚洲精品久久久8v| 欧美有码在线观看视频| 欧美成人免费在线视频| 午夜精品久久一牛影视| 国产乱码精品一区二区三区五月婷| 在线一区二区三区四区| 亚洲黄网站黄| 欧美精品国产精品| 99av国产精品欲麻豆| 亚洲福利小视频| 男人插女人欧美| 久久视频这里只有精品| 欧美视频一区二区在线观看 | 欧美xx69| 亚洲美女av在线播放| 欧美日韩久久不卡| 久久久国际精品| 国内精品伊人久久久久av影院 | 美乳少妇欧美精品| 亚洲精美视频| 在线观看日韩www视频免费 | 一区二区免费看| 久久不见久久见免费视频1| 狠狠爱成人网| 欧美另类人妖| 欧美一区二区日韩| 亚洲黄色在线观看| 午夜一区不卡| 亚洲黄色免费电影| 国产精品久久久久久久9999| 欧美在线观看一区| 亚洲美女尤物影院| 久久精品网址| 国产一区二区三区在线观看免费视频 | 久久久国产精品一区| 亚洲激情社区| 国产欧美日韩在线视频| 欧美大片免费| 久久国产手机看片| 99这里有精品| 欧美大色视频| 欧美在线视屏| 一本色道久久99精品综合 | 欧美日韩综合网| 久久精品首页| 欧美电影免费网站| 欧美一级成年大片在线观看| 亚洲人成在线观看一区二区| 欧美伦理91| 久久综合中文字幕| 亚洲国产欧美一区二区三区久久| 91久久久久久久久久久久久| 国产精品欧美在线| 欧美日韩视频在线观看一区二区三区| 欧美一区二区日韩一区二区| 亚洲婷婷在线| 99热精品在线| 亚洲精品色婷婷福利天堂| 亚洲视频第一页| 国产日韩精品一区| 国产精品久久久久久久久久直播 | 影音先锋中文字幕一区| 国产精品视频精品视频| 欧美日韩国产成人在线| 久久综合久久综合久久| 久久精品国产久精国产爱| 亚洲香蕉在线观看| 一区二区三区**美女毛片| 亚洲精品美女在线观看播放| 亚洲电影在线观看| 亚洲第一网站免费视频| 欧美成黄导航| 亚洲承认在线| 午夜在线一区| 亚洲综合精品自拍| 亚洲欧美日韩国产| 亚洲国产日韩精品| 亚洲国产精品一区二区尤物区| 国产一区二区三区日韩| 激情五月综合色婷婷一区二区| 国产丝袜一区二区三区| 国产欧美在线观看一区| 国产亚洲在线观看| 黄色一区二区在线| 最新国产成人在线观看| 日韩视频免费| 亚洲午夜一区二区| 欧美一区二区三区喷汁尤物| 久久成人国产| 欧美成年人网| 亚洲美女福利视频网站| 一本一道久久综合狠狠老精东影业| 一区二区三区免费看| 亚洲欧美日韩在线高清直播| 久久久91精品国产一区二区三区| 可以免费看不卡的av网站| 欧美精品九九99久久| 国产精品久久久91| 好看的日韩视频| 亚洲欧洲日韩女同| 宅男精品视频| 久久九九国产| 亚洲国产精品毛片| 亚洲线精品一区二区三区八戒| 欧美专区日韩视频| 欧美黑人国产人伦爽爽爽| 国产精品久久久久av| 在线日韩中文字幕| 亚洲成色999久久网站| 一区二区三区不卡视频在线观看| 午夜精品久久久久久久久久久久 | 亚洲一区二区成人| 久久嫩草精品久久久久| 亚洲片国产一区一级在线观看| 亚洲欧美美女| 欧美成人一区二区三区在线观看| 国产精品女主播一区二区三区| 国产主播喷水一区二区| 亚洲视屏在线播放| 久久亚洲欧美| 亚洲午夜视频在线| 欧美精品xxxxbbbb| 揄拍成人国产精品视频| 欧美一二三区精品| 99亚洲一区二区| 欧美xxx在线观看| 国产一区91精品张津瑜|