题意:给定点A[0~n-1]和B[0],B[1],A[0]、A[1]映射到B[0]、B[1],求出其余点的映射B[2]~B[n-1]。

析:运用复数类,关键是用模板复数类,一直编译不过,我明明能编译过,交上就不过,只能写一个复数了。。。

代码如下:

#include <cstdio>
#include <string>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <cstring>
#include <set>
#include <queue>
#include <string>
#include <algorithm>
#include <vector>
#include <map>
using namespace std ;
typedef long long LL;
typedef pair<int, int> P;
const int INF = 0x3f3f3f3f;
const double inf = 0x3f3f3f3f3f3f3f;
const int maxn = 10000 + 5;
template<class T>
class Complex
{
public:
Complex( ){real=0;imag=0;}
Complex(T r,T i){real=r;imag=i;}
Complex complex_add(Complex &c2);
Complex complex_minus(Complex &c2);
Complex complex_multiply(Complex &c2);
Complex complex_divide(Complex &c2);
T real1();
T imag1(); public:
friend istream &operator >>(istream &is, Complex<T> &p){
cin >> p.real >> p.imag;
return is;
} private:
T real;
T imag;
}; template<class T>
Complex<T> Complex<T>::complex_add(Complex<T> &c2)
{
Complex<T> c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;
} template <class T>
Complex<T> Complex<T>::complex_minus(Complex <T> &c2)
{
Complex <T> c;
c.real=real-c2.real;
c.imag=imag-c2.imag;
return c;
} template <class T>
Complex<T> Complex<T>::complex_multiply(Complex <T> &c2)
{
Complex <T> c;
c.real=real*c2.real-imag*c2.imag;
c.imag=imag*c2.real+real*c2.imag;
return c;
} template <class T>
Complex<T> Complex<T>::complex_divide(Complex <T> &c2)
{
Complex <T> c;
T d=c2.real*c2.real+c2.imag*c2.imag;
c.real=(real*c2.real+imag*c2.imag)/d;
c.imag=(imag*c2.real-real*c2.imag)/d;
return c;
} template <class T>
T Complex<T>::real1(){
return real;
} template <class T>
T Complex<T>::imag1(){
return imag;
} Complex<double> a[maxn], b[2], ans; int main(){
int T, n; cin >> T;
for(int kase = 1; kase <= T; ++kase){
scanf("%d", &n);
double x, y;
for(int i = 0; i < n; ++i){
cin >> a[i]; }
for(int i = 0; i < 2; ++i){
cin >> b[i];
} Complex<double> tmp = (b[1].complex_minus(b[0]));
Complex<double> tmp1 = (a[1].complex_minus(a[0]));
tmp = tmp.complex_divide(tmp1);
printf("Case %d:\n", kase);
for(int i = 0; i < n; ++i){
ans = (a[i].complex_minus(a[0]));
ans = ans.complex_multiply(tmp);
ans = ans.complex_add(b[0]);
printf("%.2lf %.2lf\n", ans.real1(), ans.imag1());
}
}
return 0;
}
#include <cstdio>
#include <string>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <cstring>
#include <set>
#include <queue>
#include <string>
#include <algorithm>
#include <vector>
#include <map>
#include <complex>
using namespace std ;
typedef long long LL;
typedef pair<int, int> P;
const int INF = 0x3f3f3f3f;
const double inf = 0x3f3f3f3f3f3f3f;
const int maxn = 10000 + 5;
complex<double> a[maxn], b[2], ans; int main(){
int T, n; cin >> T;
for(int kase = 1; kase <= T; ++kase){
scanf("%d", &n);
for(int i = 0; i < n; ++i)
scanf("%lf %lf", &a[i].real(), &a[i].imag());
scanf("%lf %lf %lf %lf", &b[0].real(), &b[0].imag(), &b[1].real(), &b[1].imag());
complex<double> tmp = (b[1]-b[0])/(a[1]-a[0]);
printf("Case %d:\n", kase);
for(int i = 0; i < n; ++i){
ans = (a[i]-a[0]) * tmp + b[0];
printf("%.2lf %.2lf\n", ans.real(), ans.imag());
}
}
return 0;
}

HDU 3365 New Ground (计算几何)的更多相关文章

  1. HDU 5130 Signal Interference(计算几何 + 模板)

    HDU 5130 Signal Interference(计算几何 + 模板) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5130 Descripti ...

  2. HDU 4063 Aircraft(计算几何)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4063 Description You are playing a flying game. In th ...

  3. hdu 1348:Wall(计算几何,求凸包周长)

    Wall Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. hdu 1174:爆头(计算几何,三维叉积求点到线的距离)

    爆头 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  5. HDU 5979 Convex【计算几何】 (2016ACM/ICPC亚洲区大连站)

    Convex Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  6. hdu 4631Sad Love Story<计算几何>

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4631 题意:依次给你n个点,每次求出当前点中的最近点对,输出所有最近点对的和: 思路:按照x排序,然后用s ...

  7. HDU 4606 Occupy Cities (计算几何+最短路+最小路径覆盖)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题目:给出n个城市需要去占领,有m条线段是障碍物, ...

  8. 2017 Multi-University Training Contest - Team 9 1003&&HDU 6163 CSGO【计算几何】

    CSGO Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  9. HDU 5839 Special Tetrahedron 计算几何

    Special Tetrahedron 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5839 Description Given n points ...

随机推荐

  1. rtrim,dirname,魔术常量用法

    $str = "Hello World!!!"; echo $str . "<br>"; echo rtrim($str,"!d" ...

  2. mybatis参数

    分是不是用@Param注解的这两种情况, 1,使用@Param注解,就不用理parameterType xml文档直接用 字符串的值,若是一个类,class.property 2, 不使用@Param ...

  3. CF 504E Misha and LCP on Tree——后缀数组+树链剖分

    题目:http://codeforces.com/contest/504/problem/E 树链剖分,把重链都接起来,且把每条重链的另一种方向的也都接上,在这个 2*n 的序列上跑后缀数组. 对于询 ...

  4. zookeeper运维(转)

    本文以ZooKeeper3.4.3版本的官方指南为基础:http://zookeeper.apache.org/doc/r3.4.3/zookeeperAdmin.html,补充一些作者运维实践中的要 ...

  5. JMeter启动时显示Could not open/create prefs root node Software\JavaSoft\Prefs at root 0X80000002

    在windows 7上启动jmeter时,提示错误: Java.util.prefs.WindowsPreferences <init> WARNING: Could not open/c ...

  6. dataView 工具栏

    option = { tooltip : { trigger: 'axis' }, legend: { data:['最高','最低'] }, toolbox: { show : true, orie ...

  7. Python学习笔记之os模块

    Python中的os提供了非常丰富的方法用来处理文件和目录,下面我们将详细的介绍os相关的一些方法和函数: os 路径相关的函数: 1.os.listdir(dirname):列出dirname目录下 ...

  8. paste:linux合并两个文件中的列(左右合并)

    [root@www ~]# paste [-d] file1 file2 选项与参数: -d  :后面可以接分隔字符.默认是以 [tab] 来分隔的! -   :如果 file 部分写成 - ,表示来 ...

  9. ITextSharp Table使用 (转)

    原文:http://www.cnblogs.com/LifelongLearning/archive/2011/05/16/2048116.html 表格是我们在制作文档时,经常使用的一个元素.对布局 ...

  10. 转:Oracle里几组重要的视图--v$sysstat,v$system_event,v$parameter v$system_parameter

    按组分的几组重要的性能视图 1.System 的 over view v$sysstat , v$system_event  , v$parameter,V$instance得到oracle_sid ...