mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-10-17 21:42:25 +00:00
Compare commits
4 Commits
385380934e
...
daba2089c4
Author | SHA1 | Date | |
---|---|---|---|
daba2089c4 | |||
9dd416583b | |||
67b34507d8 | |||
8e8776d58b |
42
src/10/10/P10131.cpp
Normal file
42
src/10/10/P10131.cpp
Normal file
@ -0,0 +1,42 @@
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <istream>
|
||||
#include <set>
|
||||
using ll = int64_t;
|
||||
#define sl static inline
|
||||
|
||||
const ll maxn = 1e5+5;
|
||||
ll T,n,h[maxn];
|
||||
std::set<ll> s;
|
||||
|
||||
sl void solve(){
|
||||
std::cin>>n;
|
||||
for(ll i=1;i<=n;i++)std::cin>>h[i];
|
||||
s.clear();
|
||||
for(ll i=2;i<=n;i++){
|
||||
if(h[i-1]==h[i] && s.find(h[i])==s.end()){
|
||||
s.insert(h[i]);
|
||||
}
|
||||
}
|
||||
for(ll i=3;i<=n;i++){
|
||||
if(h[i]==h[i-2] && s.find(h[i])==s.end()){
|
||||
s.insert(h[i]);
|
||||
}
|
||||
}
|
||||
if(s.empty()){
|
||||
std::cout<<"-1\n";
|
||||
return;
|
||||
}
|
||||
for(const ll i:s){
|
||||
std::cout<<i<<" ";
|
||||
}
|
||||
std::cout<<"\n";
|
||||
}
|
||||
|
||||
int main(){
|
||||
std::iostream::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
|
||||
std::cin>>T;
|
||||
while(T--)solve();
|
||||
}
|
42
src/10/10/mn1009t2.cpp
Normal file
42
src/10/10/mn1009t2.cpp
Normal file
@ -0,0 +1,42 @@
|
||||
#include <cstdint>
|
||||
#include <deque>
|
||||
#include <iostream>
|
||||
#include <istream>
|
||||
#include <utility>
|
||||
using ll = int64_t;
|
||||
|
||||
const ll maxn = 2e6+5;
|
||||
ll n,m,v,d[maxn],p[maxn],ans=0;
|
||||
std::deque<std::pair<ll, ll>> dq; // 价钱,剩余个数
|
||||
|
||||
int main(){
|
||||
std::iostream::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
|
||||
std::cin>>n>>m>>v;
|
||||
for(ll i=1;i<=n;i++)std::cin>>d[i];
|
||||
for(ll i=1;i<=n;i++)std::cin>>p[i];
|
||||
|
||||
for(ll i=1;i<=n;i++){
|
||||
const ll jdnp = p[i]-m*i;
|
||||
while(dq.size() && dq.back().first >= jdnp)dq.pop_back();
|
||||
dq.emplace_back(jdnp, d[i]+v);
|
||||
while(d[i]){
|
||||
if(dq.front().second > d[i]){
|
||||
ans+=(dq.front().first+i*m)*d[i];
|
||||
dq.front().second-=d[i];
|
||||
d[i]=0;
|
||||
}else if(dq.front().second == d[i]){
|
||||
ans+=(dq.front().first+i*m)*d[i];
|
||||
d[i]=0;
|
||||
dq.pop_front();
|
||||
}else{
|
||||
ans+=(dq.front().first+i*m)*dq.front().second;
|
||||
d[i]-=dq.front().second;
|
||||
dq.pop_front();
|
||||
}
|
||||
}
|
||||
dq.back().second=v;
|
||||
}
|
||||
std::cout<<ans<<"\n";
|
||||
}
|
24
src/10/10/mn1009t2pai.cpp
Normal file
24
src/10/10/mn1009t2pai.cpp
Normal file
@ -0,0 +1,24 @@
|
||||
#include <chrono>
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <istream>
|
||||
#include <random>
|
||||
using ll = int64_t;
|
||||
|
||||
std::mt19937 mt (time(nullptr));
|
||||
std::uniform_int_distribution<ll> un(1,2e6);
|
||||
|
||||
int main(){
|
||||
std::iostream::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
ll n = un(mt);
|
||||
std::cout<<n<<"\n";
|
||||
for(ll i=1;i<=n;i++){
|
||||
std::cout<<un(mt)<<" ";
|
||||
}
|
||||
std::cout<<"\n";
|
||||
for(ll i=1;i<=n;i++){
|
||||
std::cout<<un(mt)<<" ";
|
||||
}
|
||||
std::cout<<"\n";
|
||||
}
|
54
src/10/10/mn1009t2t.cpp
Normal file
54
src/10/10/mn1009t2t.cpp
Normal file
@ -0,0 +1,54 @@
|
||||
#include<bits/stdc++.h>
|
||||
typedef long long LL;
|
||||
using namespace std;
|
||||
const int N=2e6+100;
|
||||
|
||||
LL d[N],p[N],q[N],w[N];
|
||||
int main()
|
||||
{
|
||||
// freopen("ice.in","r",stdin);
|
||||
// freopen("ice.out","w",stdout);
|
||||
int n,m,v,i;
|
||||
cin>>n>>m>>v;
|
||||
LL ans=0,dt=0,s,dn=0;
|
||||
for (i=1;i<=n;i++) {
|
||||
cin>>d[i];
|
||||
}
|
||||
for (i=1;i<=n;i++) {
|
||||
cin>>p[i];
|
||||
}
|
||||
|
||||
int l=1,r=0;
|
||||
for (i = 1; i <= n; i++) {
|
||||
// 1. 维护队列单调性:移除价格更高的元素
|
||||
while (l <= r && p[i] - dt <= p[q[r]]) r--;
|
||||
|
||||
s = d[i]; // 当前需求量
|
||||
|
||||
// 2. 使用队列中更便宜的冰棍
|
||||
while (l <= r)
|
||||
if (s < w[q[l]] - dn) {
|
||||
// 当前需求小于队首能提供的数量
|
||||
ans += (p[q[l]] + dt) * s; // 使用s支
|
||||
dn += s; // 累计使用量增加
|
||||
s = 0;
|
||||
break;
|
||||
} else {
|
||||
// 当前需求大于等于队首能提供的数量
|
||||
ans += (p[q[l]] + dt) * (w[q[l]] - dn);
|
||||
s -= w[q[l]] - dn;
|
||||
dn = w[q[l++]]; // 队首元素完全使用,出队
|
||||
}
|
||||
|
||||
// 3. 剩余需求用当前天的价格满足
|
||||
ans += 1LL * s * p[i];
|
||||
|
||||
// 4. 将当前天加入队列
|
||||
q[++r] = i;
|
||||
w[i] = v + dn; // 当前天最多能提供v支(考虑容量)
|
||||
p[i] -= dt; // 调整价格(减去时间偏移)
|
||||
dt += m; // 时间偏移增加(存储成本)
|
||||
}
|
||||
printf("%lld\n",ans);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user