集训模拟赛-1-T2
好了不要在铺垫了直接整吧就
题目拿来!!!!!!!
倒水
(water)
(256MB,1s)
【问题描述】
你有一个水桶(记为 0),两个杯子(记为 1,2)。水桶中的水量
无限,容量也无限。1 号杯子容量为 a ml,2 号杯子容量为 b ml。一
开始,两个杯子里都没有水。
你可以执行以下几种操作:
1、将 1 号杯子中的水倒入水桶
2、将水桶中的水倒入 2 号杯子
3、将 2 号杯子中的水倒入 1 号杯子
每次倒水直到倒出水的杯子满或倒入水的杯子空才停止。
现在希望 1 号杯子中的水尽量少,但大于 0。
问通过以上操作能够获得 1 号杯子的最少水量 t 为多少?(t>0)
记获得最少水量执行了 pa 次操作 1,pb 次操作 2,希望在最少水量
的条件下 pa 尽量小(在 pa 相同的情况下还希望 pb 尽量小)。
【输入格式】
输入文件名为water.in
一行,两个数正整数 a b
【输出格式】
输出文件名为water.out
一行,三个数 t pa pb
(各变量含义如题所述)
【输入样例】
water.in water.out
5 3 1 1 2
倾倒方案为:
0->2;
2->1;
0->2;
2->1;
1->0;
2->1;
【数据规模与约定】
对于 20%的数据,pa,pb 总和不超过 5
对于 60%的数据,pa<=10^8
对于 100%的数据,0<b<=a<=10^9
说实话当时看完这个题我直接套各种东西= =因为一点思路都没有
但它实际上是个推理题
首先我们要知道每个操作执行时满足的条件
1号杯它不会在没有满时倒出,因为1杯未满说明2杯已空(一定有2->1的情况)若倒了就又重新开始了。
2号杯也只有在空的时候会执行二号操作
而2->1可以看作一步操作,因为水量是一定的,他们不对1号杯最小水量做出影响
把1杯2杯步骤三看作一个整体
杯子容量a+b=x 一开始a,b为空
到了末期一定是a>=0,b=0
体现在代码上:
一号操作:x=x-a
二号:x=x+b
三号:x=x
则求a(min)等于求x(min)
一号操作Pa次,二号操作Pb次,余下的水s=Pb*b-Pa*a
余下a与b的线性组合
x(min)=gcd(a,b)
s=gcd(a,b)
且他们的解还要除一个gcd才是min值的累加
解为-Pa+kb,Pb-ka
最小为 -Pa+kb/gcd(a,b),Pb-ka/gcd(a,b)
(好了我知道你们看不懂= =算了,代码一上估计就好理解多了)
那就代码走起!!!!!!!
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int g[][];//邻接矩阵
int f[][][][];//floyd
int _Min(int x,int y){return x<y?x:y;}
int main()
{
freopen("travel.in","r",stdin);
freopen("travel.out","w",stdout);
memset(g,,sizeof(g));
memset(f,,sizeof(f));
int n,m,T,x,y,k,i,j,l,r,s,t,L;
scanf("%d%d",&n,&m);
for(i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&k);
g[x][y]=_Min(g[x][y],k);//保存邻接矩阵中
}
for(l=;l<=n;l++)//f[] 预处理
for(r=l;r<=n;r++)//先枚举 l r
{
for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
if(l==r)//只能途经一个点
f[l][r][i][j]=_Min(g[i][j],g[i][l]+g[l][j]);//比较
else
f[l][r][i][j]=_Min(f[l][r-][i][j],f[l][r-][i][r]+f[l][r-][r][j]);//经不经过r
}
}
scanf("%d",&T);//询问
while(T--)
{
scanf("%d%d%d",&s,&t,&L);
if(g[s][t]<=L){
printf("-1\n");//-1为最小的能取到直接出最小答案
continue;
}
r=;//分界点右边的节点 恰好小于等于限制条件的那个
int ans=<<;
for(l=;l<=n;l++)
{
while(r<=n&&f[l][r][s][t]>L)r++;//对于每一行看看是否需要右移 限制在n之内分界点不出去
if(r>n)break;
ans=_Min(ans,r-l);//更新答案
}
if(ans==<<)ans=-;//没有满足条件,直接出-2
printf("%d\n",ans);
}
return ;
}
o的k?
奥利给!整他就完了!
好了今天就到这里吧 如有不懂 我也不会讲= =
散会!
集训模拟赛-1-T2的更多相关文章
- 冲刺$\mathfrak{CSP-S}$集训模拟赛总结
开坑.手懒并不想继续一场考试一篇文. 既没必要也没时间侧边栏的最新随笔题解反思相间也丑 而且最近越来越懒了竟然都不写题解了……开坑也是为了督促自己写题解. 并不想长篇大论.简要题解也得写啊QAQ. 目 ...
- 10-18 noip提高组模拟赛(codecomb)T2贪心
T2:找min:一直找最小的那个,直到a[i]-x+1小于0,就找次小的,以此类推: 求max,也是一样的,一直到最大的那个,直到次大的比之前最大的大,就找次大的: 这个模拟,可以用上priority ...
- 6.30集训模拟赛4(炸裂的一天qwq)
T1浇水: 题目描述 在一条长n米,宽m米米的长方形草地上放置着k个喷水装置.假设长方形草地的坐标范围为[ 0 , 0 ] ~ [ n , m ],那么第 i 个喷水装置的位置为(ai,m/2),也就 ...
- 雅礼 noip2018 模拟赛day3 T2
典型的状压思想 设0表示黑球,1表示白球,用一串01序列代表剩下的球的状态,记f[i]表示在i状态下取球的最大期望 那么可以利用记忆化搜索更新,每一层枚举可能拿走的球然后向下搜索,同时记忆化即可 在状 ...
- 2018.10.17校内模拟赛:T2神光
题面:pdf 首先排序,二分,然后怎么判定是否可行. 最简单的思路是,dp[i][j][k],到第i个,用了j次红光,k次绿光,前i个点都选上了,是否可行.然后转移就行. 然后考试的时候就想到这了,往 ...
- noip提高组模拟赛(QBXT)T2
T2count题解 [ 问题描述]: 小 A 是一名热衷于优化各种算法的 OIER,有一天他给了你一个随机生成的 1~n 的排列, 并定 义区间[l,r]的价值为: \[ \huge C_{l,r}= ...
- Qbxt 模拟赛 Day4 T2 gcd(矩阵乘法快速幂)
/* 矩阵乘法+快速幂. 一开始迷之题意.. 这个gcd有个规律. a b b c=a*x+b(x为常数). 然后要使b+c最小的话. 那x就等于1咯. 那么问题转化为求 a b b a+b 就是斐波 ...
- 模拟赛DAY1 T2腐草为萤
2.腐草为萤(dzy.cpp/c) [题目背景] 纤弱的淤泥中妖冶颓废在季夏第三月最幼嫩的新叶连凋零都不屑何必生离死别——银临<腐草为萤> [问题描述] 扶苏给了你一棵树,这棵树上长满了幼 ...
- 「2018-12-02模拟赛」T2 种树 解题报告
2.种树(tree.pas/cpp/in/out) 问题描述: Fanvree 很聪明,解决难题时他总会把问题简单化. 例如,他就整天喜欢把图转化为树.但是他不会缩环,那他怎么转化呢? 这是一个有 n ...
- 清北学堂模拟赛2 T2 ball
题目大意: 多组数据,每组给定n,m,表示将n个小球放进m个箱子,每个小球均有两个箱子(可能相同)可放,求所有小球均放好的方案mod998244353的总数. 思路: 算是我和题解思路肥肠相近的一道题 ...
随机推荐
- SQL基础系列(2)-内置函数--转载w3school
1. 日期函数 Mssql: SELECT GETDATE() 返回当前日期和时间 SELECT DATEPART(yyyy,OrderDate) AS OrderYear, DATEPART( ...
- 好消息,vue3.0 进入 beta 阶段!
昨天,4 月 16 日,vue 3 正式进入 beta 阶段.同日,尤大参加了 State of Vue 的线上活动,以下是他上传到 google docs 上的 slides : State of ...
- AJ学IOS(05)UI之360等下载管理器九宫格UI
AJ分享,必须精品 先看效果 主要是完成了九宫格UI的搭建 代码 - (void)viewDidLoad { [super viewDidLoad]; //九宫格中每个格子的宽 #define kAp ...
- 用threejs 实现3D物体在浏览器展示
用threejs 实现3D物体在浏览器展示,通过鼠标平移,缩放,键盘箭头按钮左右移动等功能展示. <!DOCTYPE html> <html> <head> < ...
- sql 自增序列
一.使用set identity_insert [database][owner][table]on设置时,要在插入语句中显示列出插入的列;
- Python中有许多HTTP客户端,但使用最广泛且最容易的是requests
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:北京尚脑软件测试 PS:如有需要Python学习资料的小伙伴可以加点击 ...
- Xshell 中文提示乱码
1.Alt+P 打开配置对话框,点击终端->编码,选择Unicode(utf-8)编码
- S7通信协议之你不知道的事儿
在电气学习的路上,西门子PLC应该是我的启蒙PLC,从早期的S7-300/400 PLC搭建Profibus-DP网络开始接触,到后来的S7-200Smart PLC,再到现在的S7-1200/150 ...
- 深度剖析前端JavaScript中的原型(JS的对象原型)
这张图片有点劝退了,哈哈哈~ 通过原型机制,JavaScript 中的对象从其他对象继承功能特性:这种继承机制与经典的面向对象编程语言的继承机制不同.本文将探讨这些差别,解释原型链如 ...
- BIOS时间与系统时间(windows/linux时间同步问题)
写作动机 双系统是不少人喜欢的方式,但安装双系统之后一般会出现两个系统时间不一样的问题,刚开始用双系统的时候也没怎么在意,就是装上后在网上找找相关解决方法,复制粘贴代码完事儿.但是次数多了就有点烦了, ...