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<w,如果在y从0到w的情况没有找到的话,就属于没有解的情况

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

猜你喜欢

转载自www.cnblogs.com/tombraider-shadow/p/11688317.html