(Codeforces Round 592 )1244C The Football Season (Python做法)

 题目网址:Problem - C - Codeforces

我的第一个文章^_^,有不完善的地方可以指点一下

'''C.The Football Season'''
#完善版 //解决了部分cf数据库中没有的数据量 比如3 20 15 2
#思路基本清晰
import math #利用了math库,下面的gcd(求公约数用到了这个math库)
n,p,w,d = list(map(int,input().split()))
if p%math.gcd(w, d)!=0:
    print(-1)
else:
    wcnt = p//w#可能获胜的场数(p//w 限制了wcnt肯定是小于等于n的)
    wjl=wcnt*w #可能获得的总胜场分数
    djl = p-wjl#总分减去可能赢的分数,暂且认为是平局获得分数
    dcnt = djl//d#可能平局的场数
    while djl%d!=0 and wcnt!=0:#wcnt!=0限制了wcnt不会小于0
        djl+=w
        wjl-=w
        wcnt-=1
        dcnt=djl//d
    print(wcnt,dcnt,n-wcnt-dcnt) if wcnt+dcnt<=n and\
          wcnt*w+dcnt*d==p else print(-1)

#本题用到了  <拓展欧几里得>(我只用到--→利用公约数判断是否有解)
# 二元一次不定方程:ax + by = c
# 已知a,b,c的值,求x和y 

# 判断是否存在一个x和一个y,使得等式成立
# ↓↓↓↓↓↓↓↓↓↓↓↓↓判断方法↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
# 当c%gcd(a,b)==0时,方程无解(gcd是指最大公约数)
# 也就是说当C%gcd(a,b)!=0时,方程有解
# ↑↑↑↑↑↑↑↑↑↑↑↑↑判断方法↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

#1.先通过w和d的公约数进行判断,wx+dy=p是否有解(x表示wcnt,y表示dcnt)
# 注意:这道题限制了x>=0、y>=0以及x+y<=n
# 如果无解,输出-1
# 如果有解: 
#2.
# ①先假设wcnt(胜局)的最大可能场数
#  wcnt(胜场数) = p//w
#  wjl(胜场分数)=wcnt*w 
#  djl (暂且认为是平局分)= p-wjl
#  令dcnt(平局数)=wcnt*djl//d
# ②当wcnt==0 or djl%d==0时,
#  则有可能找到了符合(题目条件)的x和y的解
#  这时我们还要进行一次判断
#  wcnt+dcnt<=n and wcnt*w+dcnt*d==p (符合该条件就会出结果,不符合就输出-1)
#  这个条件限制了wcnt+dcnt不会超过n(总场数),以及胜场分和平局分的总和不会超过总场数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值