题解 | #牛牛变魔术#

满意的数字

https://ac.nowcoder.com/acm/contest/11220/A

B. 观察发现每次操作结束后两个杯子的数一定是偶数,所以奇数直接输出-1就行,发现只要target在两个杯子水杯和总量的两倍以内就能在一次操作内达到 模拟即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int a,b,s;
signed main()
{
    cin>>t;
    while(t--){
        cin>>a>>b>>s;
        if(a==s||b==s)
            cout<<0<<endl;
        else{
            if(s%2){
                cout<<-1<<endl;
                continue;
            }
            int sum = (a+b)*2;
            int n = 0;
            while(sum<s)
            {
                sum*=2;
                n++;
            }
            cout<<n+1<<endl;
        }
         
    }
    return 0;
}

别问我为什么交了11次我真的想不通啊

一开始我交的code是这个,死都过不了 有没有大佬看看

WAcode:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int a,b,s;
signed main()
{
    cin>>t;
    while(t--){
        cin>>a>>b>>s;
        if(a==s||b==s)
            cout<<0<<endl;
        else{
            if(s%2)
               cout<<-1<<endl;
            else{
                if(s%((a+b)*2)==0)
                   cout<<(s/((a+b)*2))<<endl;
                else
                    cout<<(s/((a+b)*2))+1<<endl;
            }
        }
         
    }
    return 0;
}
全部评论
两水杯的总量是等比数列增长的,一开始我也是和WAcode那样,后来改成(long long)log2(1.*target/(a+b))+flag才过。
点赞 回复 分享
发布于 2022-01-13 21:19
试一下这个数据 1809 3015 30144
点赞 回复 分享
发布于 2022-01-14 00:08
我一开始炸int了,希望有帮助
点赞 回复 分享
发布于 2022-01-14 19:18

相关推荐

微风不断:兄弟,你把四旋翼都做出来了那个挺难的吧
点赞 评论 收藏
分享
6 收藏 评论
分享
牛客网
牛客企业服务