Aplicación básica de montón

233 Contar un chiste también es un número de alto nivel ...
Preparación reciente para el examen CSP CSPC S P para revisar la teoría de grafosdp dpd p descubrió de repente que no había jugado durante mucho tiempo, optimización del montóndijkstra dijkstrad i j k s t r a nidijkstra dijkstrad i j k s t r a Me olvidé de apilar otra vez ... Así que usé las cinco preguntas sobre el agua en el campo de entrenamiento para practicar mis manos ...
Hermanos, no me llamen blogueros sobre el agua ...
PD: PD:P S: La quinta pregunta, plantar un árbol, es codiciosa de remordimiento. Creo que es divertida y útil. No creo que sea demasiado acuosa para ver la última (aunque la última también es acuosa ...

P1801 Black Box_NOI Guide 2010 Mejorar (06)

#include<bits/stdc++.h>
using namespace std;
#define N int(2e6+1)
inline void read(int &x){
    
    
    int s=0,w=1;char ch=getchar();
    while(ch<'0'||ch>'9'){
    
    if(ch=='-')w=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){
    
    s=(s<<3)+(s<<1)+(ch&15);ch=getchar();}
    x=s*w;
}
priority_queue<int,vector<int>,greater<int> > qs;
priority_queue<int> qb;
int n,m,now,lst,a[N],req;
int main(){
    
    
    read(n),read(m);
    for(int i=1;i<=n;i++)read(a[i]);
    for(int i=1;i<=m;i++){
    
    
        read(req);
        for(int j=lst+1;j<=req;j++){
    
    
            qb.push(a[j]);
            if(qb.size()==i)qs.push(qb.top()),qb.pop();
        }
        lst=req;
        printf("%d\n",qs.top());
        qb.push(qs.top()),qs.pop();
    }
}


P2278 [HNOI2003] Sistema operativo

#include<bits/stdc++.h>
using namespace std;
struct crs{
    
    
    int id,st,ti,pr;
    bool operator < (const crs &a) const{
    
    
        if(pr==a.pr)return a.st<st;
        else return a.pr>pr;
    }
}cpu;
priority_queue<crs> q;
int nowtim;
int main(){
    
    
    while(scanf("%d%d%d%d",&cpu.id,&cpu.st,&cpu.ti,&cpu.pr)!=EOF){
    
    
        while(!q.empty()&&nowtim+q.top().ti<=cpu.st){
    
    
            printf("%d %d\n",q.top().id,nowtim+q.top().ti);
            nowtim+=q.top().ti;q.pop();
        }
        if(!q.empty()){
    
    
            crs c=q.top();q.pop();
            c.ti-=(cpu.st-nowtim);
            q.push(c);
            
        }
        q.push(cpu);
        nowtim=cpu.st;
    }
    while(!q.empty()){
    
    
        printf("%d %d\n",q.top().id,q.top().ti+nowtim);
        nowtim+=q.top().ti;
        q.pop();
    }
}

Fusión de secuencia P1631

#include<bits/stdc++.h>
using namespace std;
#define N int(1e5+1)
#define reg register
inline void read(int &x){
    
    
    int s=0,w=1;char ch=getchar();
    while(ch<'0'||ch>'9'){
    
    if(ch=='-')w=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){
    
    s=(s<<3)+(s<<1)+(ch&15);ch=getchar();}
    x=s*w;
}
priority_queue<int> q;
int n,a[N],b[N],ans[N];
int main(){
    
    
    read(n);
    for(reg int i=1;i<=n;i++)read(a[i]);
    for(reg int i=1;i<=n;i++)read(b[i]);
    for(reg int i=1;i<=n;i++){
    
    
        for(reg int j=1;j<=n;j++){
    
    
            if(q.size()<n)q.push(a[i]+b[j]);
            else{
    
    
                if(q.top()>a[i]+b[j])q.pop(),q.push(a[i]+b[j]);
                else break;
            }
        }
    }
    for(reg int i=n;i;i--)ans[i]=q.top(),q.pop();
    for(reg int i=1;i<=n;i++)printf("%d ",ans[i]);
    puts("");
}

Valor mínimo de función P2085

#include <bits/stdc++.h>
int a[10001],b[10001],c[10001],n,m,s[10000001];
int main(){
    
    
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++) scanf("%d %d %d",&a[i],&b[i],&c[i]);
    for(int i=1;i<=n;i++) for(int j=1;j<=100;j++) s[j+(i-1)*100]=a[i]*j*j+b[i]*j+c[i];
    std::sort(s+1,s+1+n*100);
    for(int i=1;i<=m;i++) printf("%d ",s[i]);
}

P1484 Plantación de árboles

#include<bits/stdc++.h>
using namespace std;
#define N int(5e5+100)
typedef long long ll;
inline void read(ll &x){
    
    
    ll s=0,w=1;char ch=getchar();
    while(ch<'0'||ch>'9'){
    
    if(ch=='-')w=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){
    
    s=(s<<3)+(s<<1)+(ch&15);ch=getchar();}
    x=s*w;
}
struct node{
    
    
    int id;
    ll w;
    bool operator <(const node &a)const {
    
    
        return w<a.w;
    }
}t;
bool vis[N];
ll ans,a[N],n,k,l[N],r[N];
priority_queue<node> q;
int main(){
    
    
    read(n);read(k);
    for(int i=1;i<=n;i++){
    
    
        read(t.w);
        t.id=i,a[i]=t.w;
        l[i]=i-1,r[i]=i+1;
        q.push(t);
    }
    r[0]=1,l[n+1]=n;
    for(int i=1;i<=k;i++){
    
    
        while(!q.empty()&&vis[q.top().id])q.pop();  
        t=q.top();q.pop();
        if(t.w<0)break;
        ans+=t.w;int x=t.id;
        a[x]=a[l[x]]+a[r[x]]-a[x];
        t.w=a[x];
        vis[l[x]]=vis[r[x]]=true;
        l[x]=l[l[x]],r[l[x]]=x;
        r[x]=r[r[x]];l[r[x]]=x;
        q.push(t);
    }
    printf("%lld\n",ans);
}



Supongo que te gusta

Origin blog.csdn.net/dhdhdhx/article/details/102573042
Recomendado
Clasificación