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实现mstsc远程桌面(rdp协议)的自动登录

    本文的Keepass版本:KeePass Password Safe Version 2.45 首先介绍一下Keepass,引用官网的解释如下: KeePass is a free open sour ...

  2. Java源码赏析(一)Object 类

    写这个系列的原因,其实网上已经有无数源码分析的文章了,多一篇不多,少一篇不少,但为什么还要写这部分文章呢?于私,其一,上班族已经很久没有打过完整的一整段有意义的话,算是锻炼个人的书写.总结能力,其二, ...

  3. 电商订单ElasticSearch同步解决方案--使用logstash

    一.使用logstash同步订单数据(订单表和订单项表)到ElasticSearch: 1.到官网下载logstash:https://www.elastic.co/cn/downloads/logs ...

  4. 推荐一款轻量小众却高效免费开源windows热键脚本语言Autohotkey

    写在前面的话 Autohotkey是一款轻量小众但高效免费开源的windows热键脚本语言,游戏操纵.鼠标操作.键盘快捷重定义,快捷短语等等,只有你想不到,没有它做不到,神器中的神器呀,相见恨晚. 安 ...

  5. 高效学习必备软件:OneNote+ Mindmaster

    做笔记有两个关键点: 一是笔记内容详略得当.二是知识的框架清晰完整. 为什么这样说? 举个例子,如图是我的笔记界面,用的是免费的OneNote, OneNote是微软出的笔记软件, 非常好用,有着书写 ...

  6. 栈和队列数据结构的基本概念及其相关的Python实现

    先来回顾一下栈和队列的基本概念: 相同点:从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同. 不同点:栈(Stack)是限定只能在表的一端进行插入和删除操作的线性 ...

  7. Matlab中的uigetfile用法

    参考:https://ww2.mathworks.cn/help/matlab/ref/uigetfile.html?searchHighlight=uigetfile&s_tid=doc_s ...

  8. 2. 在TCGA中找到并下载意向数据

    听说过别人用生信分析"空手套白狼"的故事吧想做吗好想学哦~ 或多或少都知道GEO和TCGA这些公共数据库吧!那么你知道怎么在数据库上找到意向数据,并且成功下载呢?这第一步要难倒一大 ...

  9. 创建好maven项目以后发现无法创建scala文件

    今天创建了一个maven项目  然后准备创建scala文件的时候发现没有Scala 然后只好上网上找方法了 下面是一种解决方法 1.点击file,选择settings 进去之后,选择build  进去 ...

  10. redis 开启AOF

    找到redis 安装目录 例如 cd /usr/local/redis 打开 redis.conf  修改以下参数: # vi /usr/local/redis/etc/redis.conf appe ...