分类讨论 ---- 2021 icpc 沈阳 L Linear Fractional Transformation (思维题)

news/2024/7/3 17:10:34

题目链接


题目大意

给你一个线性变换函数f(z)=az+bcz+df(z)=\frac{az+b}{cz+d}f(z)=cz+daz+b,现在把取值范围扩展到复数域。给你3个等式
f(z1)=w1f(z_1)=w_1f(z1)=w1
f(z2)=w2f(z_2)=w_2f(z2)=w2
f(z3)=w3f(z_3)=w_3f(z3)=w3
问你f(z0)f(z_0)f(z0)是多少?


解题思路:

题目有个很有意思的地方就是它保证了解是唯一的!!
现在有3个等式只能确定3个变量,那么对于第4个变量我们是可以直接赋一个特殊值去求的?

那么最特殊的是什么呢?肯定是分母啊!

那么肯定是对分母里面的ccc进行分类讨论

  1. c=0c=0c=0

如果c=0c=0c=0那么f(z)=az+bdf(z)=\frac{az+b}{d}f(z)=daz+b其实ddd就是一个常数无所谓的那么就直接把ddd变成(1,0)(1,0)(1,0)就可以直接解了

  1. c!=0c!=0c!=0
    那么我们可以直接另这个c=(1,0)c=(1,0)c=(1,0)反正上下有比例都是无所谓的,现在有3个变量,3个方程也可以直接接高斯消元就可以了

AC code

#include <bits/stdc++.h>#define endl '\n'
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define mp make_pair
#define seteps(N) fixed << setprecision(N) 
typedef long long ll;using namespace std;
/*-----------------------------------------------------------------*/ll gcd(ll A, ll b) {return b ? gcd(b, A % b) : A;}
#define INF 0x3f3f3f3fconst int N = 3e5 + 10;
const long double eps = 1e-9;
typedef pair<int, int> PII;typedef complex<long double> cp;
cp A[10][10];long double mo(cp x) {return x.imag() * x.imag() + x.real() * x.real();
}void guss(int n) {for(int i = 1; i <= n; i++ ){int r = i;for(int j = i + 1; j <= n; j++) {if(mo(A[j][i]) > mo(A[r][i])) r = j;}if(r != i) swap(A[r], A[i]);if(mo(A[i][i]) < eps) continue;for(int j = 1; j <= n; j++) {if(i == j) continue;cp tmp = A[j][i] / A[i][i];for(int k = i; k <= n + 1; k++) {A[j][k] -= A[i][k] * tmp; }}}for(int i = 1; i <= n; i++) {if(mo(A[i][i]) < eps) continue;A[i][n + 1] /= A[i][i];}
}int main() {IOS;cp a, b, c;cp z[5], w[5];cp qz;int t;long double x, y;cin >> t;while(t--) {for(int i = 1; i <= 3; i++) {cin >> x >> y;z[i].real(x);z[i].imag(y);cin >> x >> y;w[i].real(x);w[i].imag(y);}cin >> x >> y;qz.real(x);qz.imag(y);a = (w[1] - w[2]) / (z[1] - z[2]);b = w[1] - a * z[1];cp res;if(mo(a * z[3] + b - w[3]) < eps) {res = a * qz + b;} else {for(int i = 1; i <= 3; i++) {A[i][1] = z[i];A[i][2] = cp(1, 0);A[i][3] = -w[i];A[i][4] = w[i] * z[i];}guss(3);res = (A[1][4] * qz + A[2][4]) / (qz + A[3][4]);}cout << seteps(12) << res.real() << " " << res.imag() << endl;}
}

http://lihuaxi.xjx100.cn/news/285834.html

相关文章

用Python做一个翻译软件

来源 | Ahab杂货铺&#xff08;ID&#xff1a;PythonLearningCamp&#xff09;前两天吃了平哥的一波狗粮&#xff0c;他给女朋友写了一个翻译软件&#xff0c;自己真真切切的感受到了程序员的浪漫。在学习requests请求的时候做过类似的Demo&#xff0c;给百度翻译发送一个post请…

[分享]iOS开发-UI篇:CAlayer层的属性

iOS开发UI篇—CAlayer层的属性 一、position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性&#xff1a;position和anchorPoint property CGPoint position; 用来设置CALayer在父层中的位置 以父层的左上角为原点(0, 0) property CGPoint anchorPoint; 称为“定位点”、…

云服务新手必备的SaaS成本管理技巧

企业加速部署基于云的SaaS产品可以归因于很多因素-全球疫情蔓延、过时的软件和硬件&#xff0c;甚至仅仅是企业数据中心中的简单设备故障。 但是很快–如果还没有&#xff0c;你的第一笔账单也将到来。如果你是云服务新手&#xff0c;并且没有适当的SaaS成本管理控制措施&#…

她破解哈希函数算法:坚持10年做一件事一定能做成

今年9月7日&#xff0c;2019未来科学大奖揭晓&#xff0c;这项设立4年的大奖迎来首位女性得主——密码学家王小云。在信息时代&#xff0c;金融服务、网络安全等背后都离不开密码系统的“护航”。在大众眼中&#xff0c;密码带着神秘色彩&#xff0c;王小云破解和设计密码的经历…

使用C++的Socket实现从客户端到服务端,服务端到客户端传输文件

使用&#xff1a; &#xff08;1&#xff09;首先运行服务端&#xff0c;待服务端运行起来&#xff1b; &#xff08;2&#xff09;最后运行客户端&#xff0c;输入要传输文件到哪个目标机器的IP地址&#xff1b; &#xff08;3&#xff09;输入传输文件的路径及文件&#xff0…

最小割 ---- 2021 ccpc 威海 H city-safety(最大利润 = 最大收益 - 最小花费(最小割))

题目链接 题目大意&#xff1a; 一棵树&#xff0c;加强第 iii 个点有 wiw_iwi​ 的花费&#xff0c;而如果距离某 个点 ≤p≤ p≤p 的所有点都加强了&#xff0c;则会有 vpv_pvp​ 的收益&#xff0c;求最大净收益。 解题思路&#xff1a; 树形dp做法想不明白为啥是对的&…

Playboy封面女郎、互联网第一夫人,程序员们的“钢铁审美”

整理 | 琥珀 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 46 年前&#xff0c;《花花公子》&#xff08;Playboy&#xff09;的一期杂志封面女郎 Lenna&#xff0c;成为数万“钢铁直男”的梦中女神。然而&#xff0c;这位女性更为人所知的是她在计算机图像处理领…

java自动装箱性能

2019独角兽企业重金招聘Python工程师标准>>> Java 的基本数据类型&#xff08;int、double、 char&#xff09;都不是对象。但由于很多Java代码需要处理的是对象&#xff08;Object&#xff09;&#xff0c;Java给所有基本类型提供了包装类&#xff08;Integer、Dou…