汕頭市隊賽 SRM16 T2

2022-04-30 07:12:11 字數 2560 閱讀 7444

描述

貓和老鼠,看過吧?貓來了,老鼠要躲進洞裡。在一條數軸上,一共有n個洞,位置分別在xi,能容納vi只老鼠。一共有m只老鼠位置分別在xi,要躲進洞裡,問所有老鼠跑進洞裡的距離總和最小是多少。

輸入格式

兩個用空格隔開的整數m和n。

這一行m個數字分別表示老鼠的位置

接下來n行每行兩個數字分別表示洞的位置和容納量

輸出格式

乙個整數,表示最小的距離總和。(如果無解,輸出-1)

樣例輸入

4 5

6 2 8 9

3 62 1

3 64 7

4 7

樣例輸出

11

——————————————————————————

n <= 500, m <= 500 的時候可以寫費用流 但是要比較好的建圖方式

nm的建圖肯定要掛

#include#include

#include

#define ll long long

using

namespace

std;

const

int m=2e3+7,inf=0x3f3f3f3f

;const ll mx=1e15;

intread()

while(c>='

0'&&c<='

9')

return ans*f;

}int

n,m,q[m],vis[m];

intn,s,t;

ll ans,d[m];

struct nodee[m*m];

int first[m],cnt=1

,cur[m];

void ins(int a,int b,int flow,ll cost); first[a]=cnt;}

void insert(int a,int b,int flow,ll cost)

bool

spfa()

else

vis[now]=1

; }

}

}vis[x]=0

; }

return d[s]

}int dfs(int x,int

a) }

vis[x]=0

;

return

flow;

}int

x[m];

ll sum;

struct posqq[m];

bool cmp(pos a,pos b)

intmain()

sort(qq+1,qq+1+m,cmp);

for(int i=1;i<=m;i++) insert(i+n,t,qq[i].k,0

);

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

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

while(spfa())

printf(

"%lld\n

",ans);

return0;

}

view code

n <= 5000, m <= 5000 的時候就需要dp了

先將洞和老鼠按位置從小到大排一波序

因為老鼠選的洞必然是單調遞增的 我們可以考慮dp

f【i】【j】表示前i個洞選j只老鼠

轉移方程 f【i】【j】=f【i-1】【k】+(k+1到j 的距離

然後發現是三方的寫法 然後就後面可以用單調佇列優化dp降一波複雜度

然後就是n方寫法了

這裡我們每次可以算一下每只老鼠到 第i個洞的 字首

佇列裡扔的就是f【j】+(字首陣列)s【j】就好啦

f【i】=q【l】+s【i】就好辣

#include#include

#include

#define ll long long

using

namespace

std;

const

int m=5e3+7

;const ll inf=1e15;

intread()

while(c>='

0'&&c<='

9')

return ans*f;

}int

l,r,n,m,x[m];

struct pose[m];

bool cmp(pos a,pos b)

ll sum,f[m],s[m];

ll pabs(ll x)

struct nodeq[m];

intmain()

sort(x+1,x+1+n);

sort(e+1,e+1+m,cmp);

for(int i=1;i<=n;i++) f[i]=inf;

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

}printf(

"%lld\n

",f[n]);

return0;

}

view code

汕頭市隊賽 SRM 08 A

比賽沒參加 所以回來補題咯 a還是自己yy出來了的 可惜比賽沒有打 描述給乙個 01 串設為其 s,詢問是否存在只出現兩次的 01 串 t。這裡的出現定義為存在一串下標 滿足第二個樣例中,0 出現了兩次 這道題肯定先特判一波 1 和 0 是否只出現了2次 這是唯一乙個t能由單一的1或者0組成的情況 ...

汕頭市隊賽 SRM 09 A 撕書

背景 描述 琉璃在撕書。書總共有n頁,都懸浮在數軸上,第i頁的位置為 上面寫著乙個數字 琉璃從右往左撕書。假如看到了第i頁,就把在第i頁左邊,且與之距離 的書都撕掉。第i頁本身不撕 夜子為了盡量地保全魔法書,決定偷偷在琉璃開始撕之前,增加一頁。增加的這一頁必須在所有書頁的右邊,數字隨意。夜子想知道,...

汕頭市隊賽 yyl杯1 T2

背景 描述 有乙個擁有n個城市的國家。這個國家由n 1條邊連線起來。有一天國家發生叛亂。叛軍已占領了一些城市。如果叛軍占領的城市中,存在兩個城市之間有邊直接相連,則稱這種情況是壞的。現在並不知道叛軍占領了那些城市,問有多少種情況是壞的?輸入格式 第1行乙個正整數n,表示國家的大小 第2行到第n行,每...