傳送門
輸入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...