2020浙江省省賽 B

2022-05-06 21:15:11 字數 2630 閱讀 9069

傳送門

輸入n,k分別表示n個a[i]體積物品,箱子最大容量為k,求第一種操作和第二種操作需要多少個箱子。

有兩種操作,第一種操作是從1~i-1之間有沒有可以放下第i個物體體積的箱子,箱子編號越前面越好

第二種操作1~i-1之間有沒有可以放下第i個物體體積的箱子,使得箱子數最少。

第二種操作很好想直接lower_bound的找1~i-1放的箱子(排好序從小到大)尋找合適的,沒有合適就再整個箱子。multiset和map都可以用

然後比賽因為a題卡死,寫了4半小時(害,帶著隊友一起腦淤血)導致最後半小時開b題思路混亂,根本沒想到線段樹可以nlgn查詢,我甚至懷疑隊友讀錯題了……

賽後想了乙個build 建1~n 容量存k-a[i]的樹,然後查詢第i個是否有大於a[i]的值,如果有刪掉第i位置的k-a[i],再去那個符合的位置減去a[i],如果沒有就continue

#include#include#include#includeusing namespace std;

#define rson(x) x<<1

#define lson(x) x<<1|1

const int n=1e6+10;

int po[n],a[n],tree[n<<2],wei[n<<2];

int n,k,cnt1,cnt2;

void build(int l,int r,int x)

int mid=(l+r)>>1;

build(l,mid,rson(x));

build(mid+1,r,lson(x));

tree[x]=max(tree[rson(x)],tree[lson(x)]);

if(tree[rson(x)]>=tree[lson(x)])

else

return ;

}int pp;

void query(int l,int r,int x,int pos,int zhi)

int mid=(l+r)>>1;

if(tree[rson(x)]>=zhi)

else if(tree[lson(x)]>=zhi)

}void xiugai(int l,int r,int x,int pos,int zhi)

int mid=(l+r)>>1;

if(pos<=mid)

if(pos>mid)

tree[x]=max(tree[rson(x)],tree[lson(x)]);

if(tree[rson(x)]>=tree[lson(x)])

else

return ;

}int main()

build(1,n,1);

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

}mapmp;

map::iterator it;

mp[k]=n;

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

}for(auto i:mp)

cnt2+=i.second;

}printf("%d %d\n",cnt1,cnt2);

}return 0;

}

哎,如果沒有疫情水哥估計銀衝金了,而我三題打鐵了,e題主席樹賽後補題也卡死,比賽結論都沒去想,c題題目都沒讀……

水哥思路直接建1~n全是k的,然後找到k就cnt1++,就好了

#include#include#include#includeusing namespace std;

#define lson(x) x<<1

#define rson(x) x<<1|1

const int n=1e6+10;

int po[n],sum[n],a[n],tree[n<<2],wei[n<<2];

int n,k,cnt1,cnt2;

void build(int l,int r,int x)

int mid=(l+r)>>1;

build(l,mid,lson(x));

build(mid+1,r,rson(x));

tree[x]=max(tree[rson(x)],tree[lson(x)]);

return ;

}void xiugai(int l,int r,int x,int zhi)

int mid=(l+r)>>1;

if(tree[lson(x)]>=zhi)

else if(tree[rson(x)]>=zhi)

tree[x]=max(tree[rson(x)],tree[lson(x)]);

}int main()

build(1,n,1);

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

mapmp;

map::iterator it;

mp[k]=n;

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

}for(auto i:mp)

cnt2+=i.second;

}printf("%d %d\n",cnt1,cnt2);

}return 0;

}

orz

雖然補題到了五題,e題也抄模板過了,但好難受,比賽的時候可能策略出錯了吧腦子也不夠清醒,說到底還是菜,希望能變強吧

浙江省省賽 Now Loading

根據題意可以得出分母的範圍為 1 30,對於每個a j 是p i到p i 1 範圍內分母都為i 1,對於每個pi最多可以把a i 數列分為30組,所以列舉每個pi在a i 中進行二分查詢。然後用字首和處理下a i j。include using namespace std typedef long ...

2018浙江省省賽 ZOJ4024 4036

4024 題意找到這裡面是否有乙個數k,在k前面都是遞增,後面都是遞減 思路遍歷 判斷 找乙個k位置,這個位置前都是遞增,這個位置後都是遞減 for in range int input n int input an list map int input split ai an 0 f 2for i...

2020浙江省賽打鐵記

人生第一場正式icpc比賽,發篇部落格自勉。好不容易盼個線下賽,結果疫情原因直接變成網路賽。懷著興奮緊張開始打鐵之旅。12點比賽剛開,直接看到a題,誒?這不是模擬題水題,直接讓隊友c去衝,然後開始和隊友b繼續開題。過會瞄了一眼榜,k題直接過2人,我們轉攻k題,但由於工地英語 讀題一路磕磕盼盼,隊友b...