CF444 Div 1簡單題解

2022-04-30 12:33:14 字數 3403 閱讀 3420

題意:給定帶點權和邊權的無向圖,現在讓你選一些點,使得 點權和/被選點對間的邊權和 最大。

思路:不難證明,選擇邊和對應的兩點是最優的。

#include#define rep(i,a,b) for(int i=a;i<=b;i++)

using

namespace

std;

const

int maxn=200010

;double

a[maxn],ans;

intmain()

printf(

"%.10lf\n

",ans);

return0;

}

題意:給定a陣列,範圍是1到n;b陣列,是0或者1 。a陣列和b陣列都是隨機的。 然後給定規則,ci=max(aj*bk);滿足i=j+k。現在讓你求c陣列。

思路:如果b的1的個數比較少,比如num=少於100,我們可以直接暴力,複雜度o(num*n); 如果1的個數比較多,那麼我們可以大膽猜測,排名在前面的s個可以去更新很多地方的答案,假設s=40。 那麼只剩下很少的沒有被更新,對於這些,我們去暴力更新即可。 複雜度o(40*n+...)

#include#define ll long long

#define rep(i,a,b) for(int i=a;i<=b;i++)

using

namespace

std;

const

int maxn=200010

;int

n,d,a[maxn],b[maxn],c[maxn],tot;

intpos[maxn],ans[maxn],x;

intgetnextx()

intinitab()

rep(i,

0,n-1) swap(b[i],b[getnextx()%(i+1

)]);

}void

get(intp)}

intmain()

else

}rep(i,

0,n-1) if(!ans[i]) get

(i);

}rep(i,

0,n-1) printf("

%d\n

",ans[i]);

return0;

}

題意:有一排物體,一開始顏色分別是1到n。假如乙個物體顏色是col,修改為x,那麼他增加的炫麗度=abs(col-x);現在進行q次操作,1操作是區間修改顏色; 2操作是詢問區間炫麗度之和。(n<1e5);

思路:由於要查詢區間炫麗度,所以還沒法用老司機樹,畢竟odt沒有歷史記錄。 所以我們還是用線段樹,依然是利用其相同線段的勢能關係來解決這個問題。

我們對於顏色相同的區間,可以對其進行lazy操作。  lazy維護乙個顏色,和乙個加的值。 這樣的話,有些中間的變化量就可以不用去考慮了。

#include#define ll long long

#define rep(i,a,b) for(int i=a;i<=b;i++)

using

namespace

std;

const

int maxn=400010

;int

col[maxn]; ll add[maxn],sum[maxn];

void build(int now,int l,int

r)

int mid=(l+r)>>1

; build(now

<<1

,l,mid);

build(now

<<1|1,mid+1

,r);

}void pushdown(int now,int l,int

r)

if(add[now])

}void pushup(int

now)

void update(int now,int l,int r,int l,int r,int

x) pushdown(now,l,r);

int mid=(l+r)>>1

;

if(l<=mid) update(now<<1

,l,mid,l,r,x);

if(r>mid) update(now<<1|1,mid+1

,r,l,r,x);

pushup(now);

}ll query(

int now,int l,int r,int l,int

r)int

main()

else printf("

%lld\n

",query(1,1

,n,l,r));

}return0;

}

題意:給定乙個字串s,然後q次詢問,每次詢問給出s和t,|s|,|t|<=4;問包含s和t的最短區間是多長。 |s|<5e4。

思路:我們可以把s的所有長度為1到4的子串都提出來,(由於不長感覺不會出現碰撞,單hash就夠了)。

然後對於每次詢問,我們可以對含s的部分,和含t的部分找最近的地方。即兩個集合,在屬於不同集合的最近的點對,這裡可以用雙指標做到線性,單次的複雜度和較小的集合大小有關。  同時,用map記錄一下,避免多次出現極端資料。

#include#define pii pair#define rep(i,a,b) for(int i=a;i<=b;i++)

using

namespace

std;

const

int maxn=2000010

;map

int>mp;

vector

g[maxn];

char

c[maxn],a[maxn],b[maxn];

intmain()

scanf("%d

",&q);

while(q--)

int sz1=g[ta].size(),sz2=g[tb].size();

int p1=0,p2=0

;

while(p1sz2)

if(p2g[ta][p1]);

p1++;

}p1=p2=0

;

while(p1sz2)

if(p1g[tb][p2]);

p2++;

}if(ans==maxn) ans=-1

; mp[pii(ta,tb)]=ans;

printf(

"%d\n

",ans);

}return0;

}

CF453 Div1 簡單題解

pro 給定m,n,表示乙個m面的骰子,甩n次,問出現的最大的數的期望。sol 容斥,f i 表示最大數 i的期望,那麼最大數 x的期望就是f x f x 1 include define rep i,a,b for int i a i b i using namespace std const i...

CF 120F Spider 樹的直徑 簡單題

乙個男孩有n只玩具蜘蛛,每只蜘蛛都是乙個樹的結構,現在男孩準備把這n只小蜘蛛通過貼上節點接在一起,形成乙隻大的蜘蛛。大的蜘蛛也依然是樹的結構。輸出大的蜘蛛的直徑。知識 樹的直徑是指樹上的最長簡單路 求樹的直徑有個結論 假設s t這條路徑為樹的直徑,或者稱為樹上的最長路。從任意一點u出發搜到的最遠的點...

CF竟然綠掉了 這學期的目標是DIV1

c題沒出來。昨天cf竟然綠了。竟然綠了。好吧,今年的目標就是紫色,我要進div1!首先自己的dp貪心2分這樣的題目得拿下,然後資料結構圖論的題目,然後才是數學題。今年的目標就是這樣了。昨天的c題沒做出來,首先就是因為這種需要變形構造的題目自己做的太少了。另外這也算是一道資料結構題目。當然也是比較水了...