奋斗群群赛---6

奋斗群群赛—6

T1:Fraction

题目位置:

T1所在位置

题意:

即给你一个数字n,让你找到a,b使得a+b=n而且a,b互质,求a的最大情况!

AC代码:

#include <bits/stdc++.h>
using namespace std;
int gcd(int x,int y)
{
    if(y==0) return x;
    return gcd(y,x%y);
}
int main()
{
    int n;
    cin>>n;
//  cout<<gcd(18,27)<<endl;
    for(int i=n/2; i>=1; i--)
    {
        int j=n-i;
        if(gcd(i,j)==1)
        {
            cout<<i<<" "<<j<<endl;
            return 0;
        }
    }
}

小反思:

主要就是一个gcd递归函数的使用考研!

T2:Maxim Buys an Apartment

题目位置:

T2所在位置

题意:

只要就是有n所房子,有k的房子已经被人住了,而我想要与别人相邻,而且房子还没有出租的情况,问最多有几种选择和最少有几种选择?
比如(6,3) 最小情况是1,2,3被卖了,而自己只有4住,而最多就是1,3,5被卖了,而自己可以住2,4,6!于是输出1,3

AC代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long int n,k;
    cin>>n>>k;

    if(n<=k)
    {
        cout<<0<<" "<<0<<endl;
        return 0;
    }
    if(k==0)
    {
        cout<<0<<" "<<0<<endl;
        return 0;
    }
    else
    {
        cout<<1<<" ";
        if(3*k<=n)
            cout<<2*k;
        if(3*k>n)
            cout<<n-k;
        return 0;
    }
}

小反思:

主要是3*10^9会爆int的范围,所以就一直没有过,应该考虑数据的范围才好!
还有就是k=0,时是未有房子可以买的!

T3:Planning

题目位置:

T3题目所在

题意:

主要讲了有n架飞机,第i架是在imin起飞的,但是现在出现了故障,导致k分钟前都不能够起飞,这样的话每架飞机有延误而花费的费用,为1分钟的超时价格,让你求最小的花费!
利用堆来做会十分快捷!

AC代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=300005;
int a[N],air[N];
priority_queue<pair<ll,ll> > airport;
int main() {
    int n,k;
    cin>>n>>k;
    long long int tot=0;
    for(int i=1; i<=n; i++)
        cin>>a[i];

    for(int i=1; i<=k; i++)
        airport.push(make_pair(a[i],i));

    for(int i=k+1; i<=n+k; i++) {
        if(i<=n)
            airport.push(make_pair(a[i],i));
        pair<ll,ll>plane=airport.top();
        airport.pop();//¿ªÊ¼ÕûÀí

        tot+=plane.first*(i-plane.second);
        air[plane.second]=i;
    }
    cout<<tot<<endl;

    for(int i=1; i<=n; i++)
        cout<<air[i]<<" ";
    return 0;
}

小反思:

学会优先队列是关键啊!

反思:

1.学会查找数据范围会不会超!
2.学会堆!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值