CF633A

Posted pedestrian6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF633A相关的知识,希望对你有一定的参考价值。

题意:a,b<=100两种面值硬币,求能否拼成c<=10000

其实就是求ax+by=c能否求出a,b都为自然数的一组解,用扩欧求出来任意一组,然后运用公式(x+k*b/gcd(a,b),y-k*a/gcd(a,b)),k取任意整数判断

 

技术分享图片
#include<iostream>
using namespace std;
void Gcd(int a,int b,int &d,int &x,int &y){
    if (!b){
        d=a; x=1; y=0; return;
    }
    Gcd(b,a%b,d,y,x); y-=x*(a/b);
}
int main(){
    int a,b,c,gcd,x,y; cin>>a>>b>>c;
    Gcd(a,b,gcd,x,y);
    if (c%gcd!=0){cout<<"No"; return 0;}//肯定不会有整数解 
    x*=c/gcd; y*=c/gcd;//ax+by=c的解 
    
    if (x>=0&&y>=0){cout<<"Yes"; return 0;}
    //两个解都不为负 
    int b1=b/gcd,a1=a/gcd;
    if (x>0) swap(x,y),swap(a1,b1);
    //将x置为负解 
    int k=(-x)/b1; if ((-x)%b1!=0) k++;
    //求出使x+k*b/gcd(a,b)>=0的最小k 
    if (y-k*a1<0) cout<<"No";
    //此时另一个解y-k*a/gcd(a,b) 
    else cout<<"Yes";
}

以上是关于CF633A的主要内容,如果未能解决你的问题,请参考以下文章

cf 模拟

CF1435 游记

无法解析符号 c882c94be45fff9d16a1cf845fc16ec5

本人想学习破解技术但是看不懂反汇编代码!求助!!

微信小程序代码片段

VSCode自定义代码片段——CSS选择器