xjoi奋斗群群赛6

来源:互联网 发布:alchemy软件 编辑:程序博客网 时间:2024/05/17 01:17

这里写图片描述

如图

[TOC]
https://vjudge.net/contest/184118#problem

A - Fraction CodeForces - 854A

题意

  • 给出一个分子分母的和,求出分子分母互质的最大分数

题解

#include<iostream>using namespace std;int gcd(int a,int b){return b?gcd(b,a%b):a;}int main(){    int l,r,n;cin>>n;    if(n&1){        l=n/2;r=n/2+1;    }    else {        l=n/2-1;r=n/2+1;    }    while(gcd(r,l)>1){        l--;r++;    }    cout<<l<<" "<<r;}

B - Maxim Buys an Apartment CodeForces - 854B

题意

  • 一个一个长度为n的数组中有k个1,剩下的是0.组合方式未定.
  • 所谓好点为自身是0,旁边至少有一个1的点.
  • 求所给的n,k最少和最多能产生多少好点.

题解

#include<bits/stdc++.h>using namespace std;int main(){    int n,k;cin>>n>>k;    if(k==0||k==n)cout<<"0 0";    else cout<<1<<" "<<min(n-k,2*k);}

C - Planning CodeForces - 854C

题意

  • 飞机场,有n架飞机,每分钟一架飞机出发,第i架飞机延误一分钟的代价是c[i],现在要延误k分钟,使每架飞机调整后的时间不在调整前之前.

思路

  • 用优先队列priority_queue,把队列中最大的数与外面交换.

题解

#include<bits/stdc++.h>using namespace std;int t[300005],c[300005],n,k,i,j,a1,a2;long long int tot=0;priority_queue <pair<int,int> > p;pair <int,int> x;int main(){     scanf("%d %d",&n,&k);    for(i=1;i<=n;i++)        scanf("%d",&c[i]);    for(i=1;i<=k;i++)        p.push({c[i],i});    for(i=k+1;i<=k+n;i++)    {        if(i<=n)p.push({c[i],i});        x=p.top();p.pop();        tot+=1LL*(1LL*i-x.second)*x.first;        t[x.second]=i;        if(p.empty())break;    }    printf("%lld\n",tot);    for(i=1;i<=n;i++)        printf("%d ",t[i]);}

D - Jury Meeting CodeForces - 854D

见上图.