qb day6

来源:互联网 发布:免费企业名录软件 编辑:程序博客网 时间:2024/04/28 18:21

k’th number

#include<cstdio>#include<ALGORITHM>using namespace std;int n,m;long long k,ans;int a[299999],b[299999];long long check(long long x){    int j=m;long long s=0;    for(int i=1;i<=n;i++)    {        while(1ll*a[i]*b[j]>x&&j>=1) j--;        s+=j;    }    return s;}int main(){    freopen("number.in","r",stdin);    freopen("number.out","w",stdout);     scanf("%d%d%lld",&n,&m,&k);    for(int i=1;i<=n;i++)scanf("%d",&a[i]);    for(int i=1;i<=m;i++)scanf("%d",&b[i]);    sort(a+1,a+n+1);    sort(b+1,b+m+1);    long long l=1ll*a[1]*b[1],r=1ll*a[n]*b[m];    while(l<=r){        long long mid=(l+r)>>1;        long long w=check(mid);        if(w>=k) ans=mid,r=mid-1;        else l=mid+1;    }    printf("%lld",l);} 

spfa

#include<cstdio>#include<ALGORITHM>#include<queue>using namespace std;int n,m;int dis[299999],tot,nex[299999],head[299999],vis[299999],a[299999];struct st{    int x,y;}to[299999];void add(int x,int b,int c){    tot++;    to[tot].x=b;    to[tot].y=c;    nex[tot]=head[x];    head[x]=tot;}queue <int> q;int spfa(){    for(int i=1;i<=n;i++)    q.push(i),vis[i]=1;    while(!q.empty()){        int x=q.front();        q.pop();vis[x]=0;        for(int i=head[x];i;i=nex[i]){            int b=to[i].x;            int c=to[i].y;            if(dis[b]>=dis[x]+dis[c]){                dis[b]=dis[x]+dis[c];                if(!vis[b]){                    q.push(b);                    vis[b]=1;                }            }        }       }}int main(){        freopen("dwarf.in","r",stdin);    freopen("dwarf.out","w",stdout);     scanf("%d%d",&n,&m);    for(int i=1;i<=n;i++)    {        scanf("%d",&a[i]);        dis[i]=a[i];    }    for(int i=1;i<=m;i++){        int f,b,c;        scanf("%d%d%d",&f,&b,&c);        add(b,f,c);        add(c,f,b);    }    spfa();    printf("%d ",dis[1]);} 
原创粉丝点击