CodeForces 1244C-exgcd?

C. The Football Season

题目大意:一场比赛,赢了得w分,平局得d分,如果输掉比赛,则不得分,现一共进行了n场比赛,得到了p分,w和d给出

问能否求出满足题意的解

题目链接:https://codeforces.com/contest/1244/problem/C

 

解题思路:此题可以用拓展欧几里得算法来进行求解,但是由于太菜,只能另求他路,我们注意到,如果我赢了d局,平局为w局,这时候的比分是一样的。so有解的情况下,我们来假设我们的平局数为y

,如果y小于w这时候我们可以遍历y从0到w,不会超时,如果y大于w的话,我们可以是w*d的得分变成赢得局数里面的,也就是赢得局数变成了x+d,这时候,x+y变成了x+d+y-w小于原来的x+y但是总分数是不变的

在有解的情况,肯定存在一组解是y

#include
using namespace std;
typedef long long ll;
int main()
{
    ll n,p,w,d;
    cin>>n>>p>>w>>d;
    for(ll y=0;y)
    {
        ll ans=p-y*d;
        if(ans%w==0&&y+ans/w<=n&&ans>=0)
        {
            cout<" "<" "<endl;
            return 0;
        }
    }
    cout<<"-1"<<endl;
    return 0;
} 

 

你可能感兴趣的:(CodeForces 1244C-exgcd?)