BZOJ1071 SCOI2007 壓縮 其他

2022-03-31 16:50:03 字數 1026 閱讀 1990

-zhouzhendong

有兩個序列a[1..n], b[1..n],其編號為1..n,設為s序列。現在我們要求出最長的滿足條件的s的子串行s',設va=min(a[s[i]]), vb=min(b[s[i]]), 滿足對於所有的j=s'[i], a*(a[j]-va)+b*(b[j]-vb)<=c。

設v[i]=a*a[i]+b*b[i];

那麼,要求滿足v[s'[i]]-a*va-b*vb<=c,

移項得:v[s[i]]<=a*va+b*vb+c

於是我們可以按照兩種順序排序,乙個是v,乙個是b。

那麼如果確定鼓勵va,則:

a*a[i]+b*b[i]<=a*va+b*vb+c

而a*a[i]>=a*va

所以b*b[i]<=b*vb+c

移項b*(b[i]-vb)<=c,

b[i]<=vb+c/b,

都是整數,所以可以直接取整。

所以,對於所有的b[i],有vb<=b[i]<=vb+c/b。

然後雙指標,乙個掃按照b排序的,乙個掃按照s排序的。

#include #include #include #include #include using namespace std;

typedef long long ll;

const int n=5000+5;

struct playerv[n],a[n];

int n;

ll a,b,c;

bool cmp_v(player a,player b)

bool cmp_a(player a,player b)

int main()

sort(v+1,v+n+1,cmp_v);

sort(a+1,a+n+1,cmp_a);

int ans=0;

for (int i=1;i<=n;i++)

while (lans=max(ans,cnt);

} }printf("%d",ans);

return 0;

}

bzoj1071 雙指標 組隊

description nba每年都有球員選秀環節。通常用速度和身高兩項資料來衡量乙個籃球運動員的基本素質。假如一支球隊裡 速度最慢的球員速度為minv,身高最矮的球員高度為minh,那麼這支球隊的所有隊員都應該滿足 a height minh b speed minv c 其中a和b,c為給定的經...

BZOJ 1071 毒瘤題,單調指標搞搞

題目還是看原題吧。這道題簡直魔性 先膜一下大佬wjj orz 我們令s a h b v。原式就是s a minh b minv c 我們預處理出所有s。我們把資料複製兩份,x陣列按s從小到大排序,y陣列按h從小到大排序。我們隨便列舉minv,我們在算出乙個maxv minv c b 有什麼用一會解釋...

BZOJ 1079 SCOI2008 著色方案

題目 分析 一看就覺得是dp或者直接排列組合公式或者容斥?我就只想到dp的,我們用dp i j 表示前i種顏色,排列出有j對相鄰一樣顏色的方案數。當出現乙個新的顏色時,我們把這個顏色插板法插進去,我們要列舉插入的方式,可能插到相鄰顏色一樣的中間,或者不是,然後進行狀態轉移.具體看 include i...