Title

CF1181A Chunga-Changa 题解

又抓到一个大水题!出题人真良心!

题目传送门


大体思路:

只要你有点小学学历,这道题就很简单了。

为了更好理解,我们一步一步的来:

第一步: 先求出 wqy 和他的同学分开买能买多少糖果,存入 ansans (答案变量)中。

第二步: 再分别求出两人买完后剩余多少 RMBRMB,加起来看看还能不能再买一颗糖果。

第三部: 如果不能再买了,直接输出“ansans,00”; 如果还能再买一颗,那么就输出“ans+1ans+1,minmin(z-z−wqy 剩余的 RMBRMB,z-z−他的同学剩余的 RMBRMB)”。

第三步是不是有点复杂......那我再详细解释一下:

如果不能再买了,那么输出“ansans,00”,00表示无需互换 RMBRMB。

如果还能再买一颗,就输出“ans+1ans+1,minmin(z-z−wqy 剩余的 RMBRMB,z-z−他的同学剩余的 RMBRMB)”。其中:

ans+1ans+1 表示原来的答案再买一颗;

minmin(z-z−wqy 剩余的 RMBRMB,z-z−他的同学剩余的 RMBRMB)则是用来判断互换最少 RMBRMB 的方式(z-z−wqy 剩余的 RMBRMB 就是把同学多余的 RMBRMB 补给 wqy 要补多少,z-z−他的同学剩余的 RMBRMB 就是wqy把多余的 RMBRMB 补给 wqy 要补多少)。

啊,好绕啊!(不过很好理解的)


代码:

由于一开始写的代码和上面的讲解的步骤顺序不太一样,所以这里把两个代码都给上。

代码很简单,敬请欣赏~

第一个:按照讲解的步骤顺序写的代码。

源代码

复制
#include<iostream>
using namespace std;
long long a,b,q;
long long yu1,yu2;
int main(){
    cin>>a>>b>>q;
    yu1=a%q;
    yu2=b%q;
    long long ans=(a/q+b/q); //先求出ans
    if(yu1+yu2<q){
        cout<<ans<<" 0"<<endl;
        return 0; 
    }
    long long ans2;
    if(yu1>yu2){
        ans2=q-yu1;
    }
    else{
        ans2=q-yu2;
    }
    cout<<ans+1<<" "<<ans2<<endl;
    return 0;
}

第二个:将求 minmin 和判断能否再买一颗糖果位置互换了。

源代码

复制
#include<iostream>
using namespace std;
long long a,b,q;
long long yu1,yu2;
int main(){
    cin>>a>>b>>q;
    yu1=a%q; //求出两人剩余的RMB。
    yu2=b%q;
    long long ans2;
    if(yu1>yu2){ //这个代码中我提前做了取min,把结果放在了ans2里,并没有定义ans变量。
        ans2=q-yu1;
    }
    else{
        ans2=q-yu2;
    }
    if(yu1+yu2<q){ //我把判断还能不能再买一颗放在了后面。
        cout<<(a/q+b/q)<<" 0"<<endl;
    }
    else {
        cout<<(a/q+b/q)+1<<" "<<ans2<<endl;
    }
    return 0;
}

啊~~~作者已被绕晕......

posted @ 2022-08-11 13:15  Zilljy  阅读(13)  评论(0编辑  收藏  举报