C2. Power Transmission (Hard Edition) 解析(思維、幾何)
Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維、幾何)
今天我們來看看CF1163C2
題目連結
題目
給一堆點,每兩個點會造成一個直線,求有多少個直線對相交。
前言
這題提供了一個表達直線的方法。
想法
這題的難點其實是在於如何表達一條直線,且要認為用\(map\)不會超時(我也不懂為什麼最多會有\(10^6\)個不同的值但是不到\(1\)秒就跑完了)。
表達一個直線,我們從一般的直線表達式\(y=ax+b\)出發,目前\(a,b\)很有可能不是整數。我們把整個表達式乘上一個\(C\),變成\(Cy=Cax+Cb\),我們把\(Ca=A,Cb=B\),也就是\(A,B,C\)是整數。
接著代入兩點,得到\(\frac{A}{C}=\frac{y_2-y_1}{x_2-x_1}\)。接下來,由於我們希望對於同一條直線,我們得到的\(A,B,C\)都是完全相同的,因此我們先令\(g=gcd(\frac{|\Delta y|}{|\Delta x|})\) where \(\Delta y=y_2-y_1,\Delta x=x_2-x_1\),接著\(C=\frac{\Delta x}{g},A=\frac{\Delta y}{g}\),之後再計算出\(B=\frac{x_1y_2-x_2y_1}{g}\)。
最後還需要
if(A<0)A=-A,C=-C,B=-B;if(A==0 and C<0)C=-C,B=-B;
我們要用兩個\(map\)分別紀錄\(\{A,C,B\}\)出現過了沒(當同樣的直線出現過時才能忽略),和紀錄\(\{A,C\}\)出現了幾次(紀錄每種斜率的平行線段有多少個)。
接著只要遍歷所有出現過的斜率把答案加上即可。
程式碼:
const int _n=1010;
int t,n,x,y,g,A,B,C,cnt;
PII pts[_n];
struct L{
int A,C,B;
bool operator<(const L& rhs)const{
if(A==rhs.A){
if(B==rhs.B)return C<rhs.C;
return B<rhs.B;
}return A<rhs.A;
}
};
map<L,int> mp;
map<PII,int> mp2;
main(void) {cin.tie(0);ios_base::sync_with_stdio(0);
cin>>n;rep(i,1,n+1)cin>>pts[i].fi>>pts[i].se;
rep(i,1,n)rep(j,i+1,n+1){
x=pts[j].fi-pts[i].fi,y=pts[j].se-pts[i].se,g=__gcd(abs(x),abs(y));
A=y/g,C=x/g,B=(pts[i].fi*pts[j].se-pts[j].fi*pts[i].se)/g;
if(A<0)A=-A,C=-C,B=-B;if(A==0 and C<0)C=-C,B=-B;
if(!mp[{A,C,B}]){
mp[{A,C,B}]++,mp2[{A,C}]++,cnt++;
}
}ll ans=0;
for(auto it=mp2.begin();it!=mp2.end();it++){
A=it->fi.fi,C=it->fi.se;
ans+=1ll*mp2[{A,C}]*(cnt-mp2[{A,C}]);
}cout<<ans/2<<'\n';
return 0;
}
標頭、模板請點Submission看
Submission
C2. Power Transmission (Hard Edition) 解析(思維、幾何)的更多相关文章
- C2. Pokémon Army (hard version) 解析(思維)
Codeforce 1420 C2. Pokémon Army (hard version) 解析(思維) 今天我們來看看CF1420C2 題目連結 題目 略,請直接看原題. 前言 根本想不到這個等價 ...
- C2. Power Transmission (Hard Edition)(线段相交)
This problem is same as the previous one, but has larger constraints. It was a Sunday morning when t ...
- A. Arena of Greed 解析(思維)
Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...
- E. Almost Regular Bracket Sequence 解析(思維)
Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...
- F. Moving Points 解析(思維、離散化、BIT、前綴和)
Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...
- B. Two Arrays 解析(思維)
Codeforce 1417 B. Two Arrays 解析(思維) 今天我們來看看CF1417B 題目連結 題目 略,請直接看原題. 前言 a @copyright petjelinux 版權所有 ...
- C. k-Amazing Numbers 解析(思維)
Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...
- D. Road to Post Office 解析(思維)
Codeforce 702 D. Road to Post Office 解析(思維) 今天我們來看看CF702D 題目連結 題目 略,請直接看原題. 前言 原本想說會不會也是要列式子解或者二分搜,沒 ...
- C. Bank Hacking 解析(思維)
Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...
随机推荐
- 关于KeePass基于csv格式的批量导入与导出
在KeePass的导出选项中,有一个KeePass CSV(1.x),导出后格式如下: "Account","Login Name","Passwor ...
- Kubernetes K8S之Ingress详解与示例
K8S之Ingress概述与说明,并详解Ingress常用示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C ...
- 刷题[BJDCTF 2nd]简单注入
解题思路 打开发现登陆框,随机输入一些,发现有waf,然后回显都是同样的字符串.fuzz一波,发现禁了挺多东西的. select union 等 这里猜测是布尔盲注,错误的话显示的是:You konw ...
- 关于struts1与struts2
1.Action方面 Action是整个Struts框架的核心内容,Struts1.x与Struts2的Action模型很大的区别.Struts2是一个 pull-MVC架构 ,从开发者角度看,就是说 ...
- 手把手教你AspNetCore WebApi:增删改查
前言 小明已经创建与运行了WebApi项目,了解项目结构有哪些组成,并学会了怎么发布到IIS.基础已经建好,从现在开始要真正实现待办事项的功能了. 新建表 CREATE TABLE [dbo].[To ...
- 010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二——变量类型——即Java中的数据类型
010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二--变量类型--即Java中的数据类型 Java中变量的三要素 变量名 变 ...
- 如何使用MATLAB对图片的RGB三种颜色进行提取
参考: https://jingyan.baidu.com/article/456c463b41de5f0a5831448e.html matlab在图像处理方面,具有很强大的应用.下面将分享如何使用 ...
- Ubuntu18.04下Git安装及使用
Ubuntu 18.04 git安装配置及基本使用 git Ubuntu 准备 对Ubuntu相关资源升级 1. linux资源升级 sudo apt-get update 2. linux软件升级 ...
- 初探电波钟(A Brief Introduction Of Radio Controlled Clock AND Its Appliciations)
文档标识符:Radio_Controlled_Clock_T-D-P11 作者:DLHC 最后修改日期:2020.10.12 本文链接:https://www.cnblogs.com/DLHC-TEC ...
- gitlab-centos的安装
一:gitlab-CentOS的安装 1. 环境准备 1 [root@1-231 ~]# cat /etc/redhat-release 2 CentOS Linux release 7.4.170 ...