神思路。。。
倘若兩片雲能夠相遇,那麼把他們對映到y=-x上的線段相交
為什麼?
第一象限往下,第三象限往右他們最先相交的那兩個點的初始位置和交點位置構成乙個等腰直角三角形
如果沒有這樣的等腰直角三角形則不能相交
y=-x與該三角形底邊垂直
所以兩點初始位置向y=-x作垂線,垂足重合
如何將矩形對映到y=-x上?
將左上角和右上角這兩個點向y=-x作垂線,根據等腰直角三角形推一推可得垂足的縱座標為(y-x)/2
除以2會產生小數,不用除效果是一樣的
然後問題轉化成有一些a類線段和一些b類線段,求ab相交的線段對數
掃瞄線將線段的端點從小到大排序
分別記錄當前a類線段、b類線段個數
碰到線段左端點,對應類別線段個數+1,並累加當前另一種類別線段的個數
即每次累計左端點在該線段之前並與該線段相交的線段個數
碰到線段右端點,對應類別線段個數-1
#include#includeusing
namespace
std;
#define n 100001
struct
node
}e[n
<<2
]; int
cnt[n];
bool
cmp(node p,node q)
intmain()
for(int i=1;i<=m;++i)
sort(e+1,e+tot+1
,cmp);
long
long ans=0
;
for(int i=1;i<=tot;++i)
printf(
"%lld
",ans);
}
2020牛客寒假演算法基礎集訓營
長期更新,補完為止 2 g 判正誤 題意 t組資料。判斷a d b e c f是否等於g。1e9 a,b,c,g 1e9,0 d,e,f 1e9。保證不會出現指數和底數同為 0 的情況。思路 硬算會tle或mle。快速冪取模,為了增加過題概率,多取幾個模數判斷。includeusing namesp...
2020牛客寒假演算法基礎集訓營1
找規律,推公式 三角形個數為2 m n m n m 1 n 1 2 m n mn m 1 n 1 2 m n mn m 1 n 1 include include include include using namespace std typedef long long ll const int m...
2020牛客寒假演算法基礎集訓營1
h題 突然發現h題可以用好多種方法做的。方法一 雙指標,維護乙個修改次數小於等於k的區間 include using namespace std typedef long long ll const int mod 1e9 7 const int n 1e5 5 const int inf 0x3f...