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) 解析(思維、幾何)的更多相关文章

  1. C2. Pokémon Army (hard version) 解析(思維)

    Codeforce 1420 C2. Pokémon Army (hard version) 解析(思維) 今天我們來看看CF1420C2 題目連結 題目 略,請直接看原題. 前言 根本想不到這個等價 ...

  2. C2. Power Transmission (Hard Edition)(线段相交)

    This problem is same as the previous one, but has larger constraints. It was a Sunday morning when t ...

  3. A. Arena of Greed 解析(思維)

    Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...

  4. E. Almost Regular Bracket Sequence 解析(思維)

    Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...

  5. F. Moving Points 解析(思維、離散化、BIT、前綴和)

    Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...

  6. B. Two Arrays 解析(思維)

    Codeforce 1417 B. Two Arrays 解析(思維) 今天我們來看看CF1417B 題目連結 題目 略,請直接看原題. 前言 a @copyright petjelinux 版權所有 ...

  7. C. k-Amazing Numbers 解析(思維)

    Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...

  8. D. Road to Post Office 解析(思維)

    Codeforce 702 D. Road to Post Office 解析(思維) 今天我們來看看CF702D 題目連結 題目 略,請直接看原題. 前言 原本想說會不會也是要列式子解或者二分搜,沒 ...

  9. C. Bank Hacking 解析(思維)

    Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...

随机推荐

  1. 关于KeePass基于csv格式的批量导入与导出

    在KeePass的导出选项中,有一个KeePass CSV(1.x),导出后格式如下: "Account","Login Name","Passwor ...

  2. Kubernetes K8S之Ingress详解与示例

    K8S之Ingress概述与说明,并详解Ingress常用示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C ...

  3. 刷题[BJDCTF 2nd]简单注入

    解题思路 打开发现登陆框,随机输入一些,发现有waf,然后回显都是同样的字符串.fuzz一波,发现禁了挺多东西的. select union 等 这里猜测是布尔盲注,错误的话显示的是:You konw ...

  4. 关于struts1与struts2

    1.Action方面 Action是整个Struts框架的核心内容,Struts1.x与Struts2的Action模型很大的区别.Struts2是一个 pull-MVC架构 ,从开发者角度看,就是说 ...

  5. 手把手教你AspNetCore WebApi:增删改查

    前言 小明已经创建与运行了WebApi项目,了解项目结构有哪些组成,并学会了怎么发布到IIS.基础已经建好,从现在开始要真正实现待办事项的功能了. 新建表 CREATE TABLE [dbo].[To ...

  6. 010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二——变量类型——即Java中的数据类型

    010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二--变量类型--即Java中的数据类型 Java中变量的三要素 变量名 变 ...

  7. 如何使用MATLAB对图片的RGB三种颜色进行提取

    参考: https://jingyan.baidu.com/article/456c463b41de5f0a5831448e.html matlab在图像处理方面,具有很强大的应用.下面将分享如何使用 ...

  8. Ubuntu18.04下Git安装及使用

    Ubuntu 18.04 git安装配置及基本使用 git Ubuntu 准备 对Ubuntu相关资源升级 1. linux资源升级 sudo apt-get update 2. linux软件升级 ...

  9. 初探电波钟(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 ...

  10. gitlab-centos的安装

    一:gitlab-CentOS的安装  1. 环境准备 1 [root@1-231 ~]# cat /etc/redhat-release 2 CentOS Linux release 7.4.170 ...