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; }