oj记录 codeforces 1679 A. AvtoBus (思维

题目描述

https://codeforces.com/contest/1679/problem/A

Spring has come, and the management of the AvtoBus bus fleet has given the order to replace winter tires with summer tires on all buses.

You own a small bus service business and you have just received an order to replace n tires. You know that the bus fleet owns two types of buses: with two axles (these buses have 4 wheels) and with three axles (these buses have 6 wheels).

You don’t know how many buses of which type the AvtoBus bus fleet owns, so you wonder how many buses the fleet might have. You have to determine the minimum and the maximum number of buses that can be in the fleet if you know that the total number of wheels for all buses is n.

题意

给出整数n,满足4x+6y=n(x、y为非负整数),求x+y的最小值和最大值(>=1)。若不存在,输出-1.

思路

  • 首先n必须为偶数,且必须>=4。
  • 既然n一定是偶数,不妨n/=2,问题变成2x+3y=n;
  • 显然x+y的最小值为n/3,最大值为n/2(如果可以整除)
  • 如果不能整除:
    当n%3=1,可以把一个3和余下的1 换成两个2,即ans=n/3+1;
    当n%3=2,就直接把余下的2 作为‘2’,ans也是n/3+1;
    同理:n%2=1时,把一个2和余下的1换为3,ans为n/2

code

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
// const int mod=1e9+7;
// const int N;


void solv()
{
    ll n;
    cin>>n;
    if(n&1||n<4)cout<<-1<<'\n';
    else
    {
        n/=2;
        ll ans1,ans2;
        if(n%3==0)ans1=n/3;
        else ans1=n/3+1;
        ans2=n/2;
        cout<<ans1<<' '<<ans2<<'\n';
    }

}

int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int T=1;
    cin>>T;
    while(T--)
    {
        solv();
    }
    return 0;
}

注意与总结

-做题时没有考虑到可以用余数和2或3组合来换成合法的答案
(>﹏<)

知识补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值