Online JudgeLuoguCodeforces Round #592 (Div. 2) C

Label:数学,思维题, 枚举

题目描述

某球队一共打了$n$场比赛,总得分为$p$,已知赢一场得$w$分,平局一场得$d$分,输一场不加分也不减分,问一共赢了几场(x),平局了几场(y),输了几场(z)?如果不存在合法方案输出"-1",如果存在多组可能的方案,任意输出一组(Special Judge)。

也就是任求一组符合条件的非负整数三元组$(x,y,z)$,满足:

\[
x\cdot w+y\cdot d=p \\
x+y+z=n
\]

输入

四个整数$n,p,w,d$。

输出

输出三个整数表示符合条件的三元组,如果不存在,则输出"-1"。

样例

Input#1

30 60 3 1

Output#1

17 9 4

Input#2

10 51 5 4

Output#2

-1

Input#3

20 0 15 5

Output#3

0 0 20

Hint

$1<=n<=10^{12}$,$0<=p<=10^{17}$,$1<=d<w<=10^{5}$。

注意,题目数据保证了$d<w$,也就是赢一场的得分严格大于平局一场的得分。

题解

一开始看题,直接打了个exgcd去解不定方程最小解,结果好像中间会爆long long 就WA掉了。其实仔细读题,根本根本不需要这样搞。

现在需要解一个这样的方程组

\[
x+y+z=n....①\\
x\cdot w+y\cdot d=p....②\\
\]

①式可以转化为$x+y<=n$,$z$的大小再根据$x,y$具体调整即可。

假设存在一组二元组$(x,y)$,已经能够满足②式了,现在考虑再构造一组解,使得$x+y$尽量小,能满足①式。

则有

\[
x\cdot w+w\cdot d-w\cdot d+y\cdot d=p\\→(x+d)\cdot w+(y-w)\cdot d=p\\
\]

也就是说必然还存在一组满足②式的解$(x+d,y-w)\(,多次进行这样的操作,可以得到\)(x+2d,y-2w)\(,\)(x+3d,y-3w)$,......,由于需要满足$x>0,y>0,z>0$,必然有一个下限使得此时的$y'<w$,减不动了,可以证明此时的这组解一定是最优的(也就是此时的$x'+y'$最小)。为什么呢,由于题目强调了$w>d$,也就是$x->x'$的增量小于$y->y'$减量,所以此时的$x'+y'$一定最小。

所以只用枚举$y∈[0,w-1]$即可,然后分别带入计算得到此时的$x$,再判一下$x+y<=n$这个条件,如果这个范围内都没有满足条件的解,$y$再往大枚举也不可能出现满足条件的解了。

综上时间复杂度为$O(W)$,\(W<=10^5\)。

#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
ll n,p,w,d;
signed main(){
cin>>n>>p>>w>>d;
for(int y=0;y<w;y++){
int left=p-y*d;
if(left%w)continue;
int x=left/w;
if(x>=0&&x+y<=n){
printf("%lld %lld %lld\n",x,y,n-x-y);
return 0;
}
}
puts("-1");
}

[CF1244C] The Football Season【数学,思维题,枚举】的更多相关文章

  1. PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记

    PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...

  2. 51Nod 1003 阶乘后面0的数量(数学,思维题)

    1003 阶乘后面0的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 720 ...

  3. Bonetrousle HackerRank 数学 + 思维题

    https://www.hackerrank.com/contests/world-codesprint-6/challenges/bonetrousle 给定一个数n,和k个数,1--k这k个,要求 ...

  4. 【数学 思维题】HDU4473Exam

    过程很美妙啊 Problem Description Rikka is a high school girl suffering seriously from Chūnibyō (the age of ...

  5. hdu 4091 数学思维题贪心

    /* 参看博客地址:http://blog.csdn.net/oceanlight/article/details/7857713 重点是取完最优的后剩余的rest=n%lcm+lcm;中性价比小的数 ...

  6. CF1244C The Football Season

    题目链接 problem 给定\(n,p,w,d\),求解任意一对\((x,y)\)满足\[xw+yd=p\\ x + y \le n\] \(1\le n\le 10^{12},0\le p\le ...

  7. Gym 100801D Distribution in Metagonia (数学思维题)

    题目:传送门.(需要下载PDF) 题意:t组数据,每组数据给定一个数ni(1 ≤ ni ≤ 10^18),把ni拆成尽可能多的数,要求每个数的素因子只包含2和3,且这些数不能被彼此整除,输出一共能拆成 ...

  8. BZOJ4377 Kurs szybkiego czytania \ Luogu 3589[POI2015]KUR - 数学思维题

    Solution 我又双叒叕去看题解啦$QAQ$, 真的想不到鸭 输入 $a$ 和 $n$ 互质, 所以满足 $a \times i \ mod \ n$ $(0<=i<n)$ 肯定是不重 ...

  9. BZOJ4377[POI2015]Kurs szybkiego czytania——数学思维题

    题目描述 给定n,a,b,p,其中n,a互质.定义一个长度为n的01串c[0..n-1],其中c[i]==0当且仅当(ai+b) mod n < p.给定一个长为m的小01串,求出小串在大串中出 ...

随机推荐

  1. UVA 1525 Falling Leaves

    题目链接:https://vjudge.net/problem/UVA-1525 题目链接:https://vjudge.net/problem/POJ-1577 题目大意 略. 分析 建树,然后先序 ...

  2. 区分slice,splice,split

    原文:https://www.cnblogs.com/webjoker/p/5218114.html 1.slice(数组) 用法:array.slice(start,end) 解释:该方法是对数组进 ...

  3. JSON数组对象和JSON字符串的转化,map和JSON对象之间的转化

    这种用法包括前端和后端: 前端: 1. 转化为JSON对象方便操作 var jsonObj = JSON.parse(str); 得到的是一个json数组对象,可以通过 for (var p in j ...

  4. 自动化监控系统(三) 搭建xadmin做网站后台

    Django有个自带的admin后台,不过界面不怎么好看,这里我用xadmin 我的python版本是3.5,可以使用支持py3的xadmin:https://github.com/sshwsfc/x ...

  5. 自动生成web api接口文档

    然后打开web程序,访问ip:port/Help. 为什么可以直接输入Help就能访问呢,因为这个插件本身已经配置了路径,如下. public class HelpPageAreaRegistrati ...

  6. css translate/rotate 空间坐标轴

    参考:https://www.cnblogs.com/zhangnan35/p/10709876.html https://www.cnblogs.com/zyrblog/p/11142624.htm ...

  7. PC端写的API接口和手机端APP联合调试

    一.遇到问题的情况:项目框架:asp.net MVC5 ,写的给手机端调用的API接口. 二.自己在本地 IIS上部署项目,在手机端的请求服务器上把地址和端口换上本地部署的,如图所示 三.用管理员的身 ...

  8. [转]WPF中的导航框架

    有的时候,我们需要一个支持页面跳转的UI,例如文件浏览器,开始向导等.对于这样的界面,简单的可以使用ContentControl + ContentTemplateSelector的方式来实现,但是有 ...

  9. JS实现菜单滚动到一定高度后固定

    在有些网页中我们会发现会有这样的现象:某个div会随着屏幕的滚动达到一定高度的时候位置就固定下来了.例如一下导航条: 那么这里就需要用到JS的逻辑方法来实现了. html <div id=&qu ...

  10. 如何配置vue-cli4.0

    这是一期主要分享vue-cli4.0配置 新建一个项目,最令人为难的是配置环境.拿vue来说,创建项目很简单,跟着文档走即可,但是要知道配置本地,测试,生产环境,以及反向代理等等,如果对于一个对vue ...