個人賽gym102220總結

2021-10-08 22:36:54 字數 1881 閱讀 1940

gym102220

這次的題目看起來和理解起來幾乎障礙較少,在我這英語水平階段配上詞典就看懂啦一半題目(我看啦一半,也就是看過的都懂),看過的也沒幾個會的。雖然有想法,但是演算法還是懂得的太少啦,比如c題的線段相交,我是求的那個y=kx+b的引數,其實這道題需要用到pair(我之前沒見過需要提高精度,斜率一點誤差就非常傷),需要用到ax+by=c這種形式,

題解:兩條直線不平行必相交,若平行:若重合答案加1,否則不算。

我們用兩個map來刻畫直線的特性,mp1刻畫ax+by的直線系有多少個,mp2刻畫ax+by=c這一條直線有多少個。

假設當前直線與之前的線段都相交,那麼我們需要減去與這條直線平行而不重合的直線。即ans+=i-1+mp2-mp1.

typedef

long

long ll;

typedef pairp;

typedef pair

,ll>pi;

const

int maxn=

100010

;map

,ll>mp1;

//兩個引數a,b,代表形如a*x+b*y=c(c任意)的直線有多少個

map,ll>

,ll>mp2;

//三個引數a,b,c,代表形如a*x+b*y=c的直線有多少個,即相同直線有多少個

ll cnt,ans,n;

intmain()

cout<}return0;

}

g題當時沒想到居然是中位數(可能當時實現中位數還是沒頭緒),一直想著全都遍歷,然後直接超時,┭┮﹏┭┮。題解:由於橫縱方向地位相同,我們不妨來看橫方向,題目要找一點x使得n條線段經過平移最少次數,至少重合一點。

假設那一點就為x,那麼一條線段至少與x有交點的話,所需距離為:d=(|l-x|+|r-x|-|r-l|)/2,紙上畫一遍即可。我們要找的是所有線段移動的距離之和最小,那麼只需σd最小,

由於d中的|r-l|為常數,所以我們只需要求σ(|l-x|+|r-x|)最小,那麼x就是所有l,r的中位數了~~。題目難得就是轉化~~。

中位數的做法就是`

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int max_n=

100000+5

;//資料大小

int n;

int a[max_n][4

];int z[max_n*2]

;long

long

intget

(int s,

int t)

sort

(z,z+

2*n)

;//排序是為啦找到中位數

long

long

int res=0;

for(

int i=

0;i<

2*n;i++

)for

(int i=

0;i)return res/2;

//第三步 公式:d=(|l-x|+|r-x|-|r-l|)/2

}int

main()

}long

long

int res=0;

res+

=get(1

,3);

//y的

res+

=get(0

,2);

//x的

printf

("%lld\n"

,res);}

return0;

}

周五個人賽總結

這次個人賽四個小時的時間只解出來了乙個題,還是乙個水題,通過這次比賽暴露了自身存在的的幾個問題。1.解題的順序上,不願意捨棄已經有一點思路的難題,這種題可能以現在的水平,在四個小時內根本無法解出,或者根本無法正確的解出。在本次比賽中,一道題花費了兩個多小時的時間,終於將能通過案例的 寫出,但在提交後...

個人賽第一場解題總結

a 大王叫我來巡山吶 crawling in process.crawling failed time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status practice fzu 2167 descript...

個人賽 A 題 傳球遊戲(ball)

description 上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師在此吹哨子時,傳球停止,此時,...