好了不要在铺垫了直接整吧就

题目拿来!!!!!!!

倒水
(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的更多相关文章

  1. 冲刺$\mathfrak{CSP-S}$集训模拟赛总结

    开坑.手懒并不想继续一场考试一篇文. 既没必要也没时间侧边栏的最新随笔题解反思相间也丑 而且最近越来越懒了竟然都不写题解了……开坑也是为了督促自己写题解. 并不想长篇大论.简要题解也得写啊QAQ. 目 ...

  2. 10-18 noip提高组模拟赛(codecomb)T2贪心

    T2:找min:一直找最小的那个,直到a[i]-x+1小于0,就找次小的,以此类推: 求max,也是一样的,一直到最大的那个,直到次大的比之前最大的大,就找次大的: 这个模拟,可以用上priority ...

  3. 6.30集训模拟赛4(炸裂的一天qwq)

    T1浇水: 题目描述 在一条长n米,宽m米米的长方形草地上放置着k个喷水装置.假设长方形草地的坐标范围为[ 0 , 0 ] ~ [ n , m ],那么第 i 个喷水装置的位置为(ai,m/2),也就 ...

  4. 雅礼 noip2018 模拟赛day3 T2

    典型的状压思想 设0表示黑球,1表示白球,用一串01序列代表剩下的球的状态,记f[i]表示在i状态下取球的最大期望 那么可以利用记忆化搜索更新,每一层枚举可能拿走的球然后向下搜索,同时记忆化即可 在状 ...

  5. 2018.10.17校内模拟赛:T2神光

    题面:pdf 首先排序,二分,然后怎么判定是否可行. 最简单的思路是,dp[i][j][k],到第i个,用了j次红光,k次绿光,前i个点都选上了,是否可行.然后转移就行. 然后考试的时候就想到这了,往 ...

  6. noip提高组模拟赛(QBXT)T2

    T2count题解 [ 问题描述]: 小 A 是一名热衷于优化各种算法的 OIER,有一天他给了你一个随机生成的 1~n 的排列, 并定 义区间[l,r]的价值为: \[ \huge C_{l,r}= ...

  7. Qbxt 模拟赛 Day4 T2 gcd(矩阵乘法快速幂)

    /* 矩阵乘法+快速幂. 一开始迷之题意.. 这个gcd有个规律. a b b c=a*x+b(x为常数). 然后要使b+c最小的话. 那x就等于1咯. 那么问题转化为求 a b b a+b 就是斐波 ...

  8. 模拟赛DAY1 T2腐草为萤

    2.腐草为萤(dzy.cpp/c) [题目背景] 纤弱的淤泥中妖冶颓废在季夏第三月最幼嫩的新叶连凋零都不屑何必生离死别——银临<腐草为萤> [问题描述] 扶苏给了你一棵树,这棵树上长满了幼 ...

  9. 「2018-12-02模拟赛」T2 种树 解题报告

    2.种树(tree.pas/cpp/in/out) 问题描述: Fanvree 很聪明,解决难题时他总会把问题简单化. 例如,他就整天喜欢把图转化为树.但是他不会缩环,那他怎么转化呢? 这是一个有 n ...

  10. 清北学堂模拟赛2 T2 ball

    题目大意: 多组数据,每组给定n,m,表示将n个小球放进m个箱子,每个小球均有两个箱子(可能相同)可放,求所有小球均放好的方案mod998244353的总数. 思路: 算是我和题解思路肥肠相近的一道题 ...

随机推荐

  1. Go gRPC进阶-TLS认证+自定义方法认证(七)

    前言 前面篇章的gRPC都是明文传输的,容易被篡改数据.本章将介绍如何为gRPC添加安全机制,包括TLS证书认证和Token认证. TLS证书认证 什么是TLS TLS(Transport Layer ...

  2. hive常用函数二

    逻辑运算: 1. 逻辑与操作: AND 语法: A AND B 操作类型:boolean 说明:如果A和B均为TRUE,则为TRUE:否则为FALSE.如果A为NULL或B为NULL,则为NULL 举 ...

  3. MYSQ创建联合索引,字段的先后顺序,对查询的影响分析

    MYSQ创建联合索引,字段的先后顺序,对查询的影响分析 前言 最左匹配原则 为什么会有最左前缀呢? 联合索引的存储结构 联合索引字段的先后顺序 b+树可以存储的数据条数 总结 参考 MYSQ创建联合索 ...

  4. 数据结构和算法(Golang实现)(8.1)基础知识-前言

    基础知识 学习数据结构和算法.我们要知道一些基础的知识. 一.什么是算法 算法(英文algorithm)这个词在中文里面博大精深,表示算账的方法,也可以表示运筹帷幄的计谋等.在计算机科技里,它表示什么 ...

  5. 这本最适合夯实基础的经典 Java 书籍,可能80% 的 Java 程序员没有认真看过!

    公众号[程序员书单]出品,转载请注明出处 作者:黄小斜 今天要给大家带来的一本书,是大名鼎鼎的head first系列丛书的一本<head first Java>相信很多学习Java的朋友 ...

  6. 经常出现在python中的错误和异常处理

    PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 http://t.cn/A6Zvjdun 使用try except处理异常 上面的代码中,被除数是0,会引发ZeroDivisio ...

  7. 莫名的证书错误...ERROR ITMS-90035:"Invalid Signature.

    请删除 .DS_Store 这种类似的文件再尝试

  8. 成员指针与mem_fn

    本文是<functional>系列的第4篇. 成员指针是一个非常具有C++特色的功能.更低级的语言(如C)没有类,也就没有成员的概念:更高级的语言(如Java)没有指针,即使有也不会有成员 ...

  9. redis:String字符串类型(三)

    字符串拼接(如果key不存在则创建):append name " applesnt" 获取字符串的长度:strlen name 127.0.0.1:6379> set nam ...

  10. Java中的匿名对象代码实例

    /* 匿名对象:就是没有名字的对象. 匿名对象的应用场景: A:调用场景,仅仅只调用一次的时候. 注意:调用多次的时候,不合适. 那么,这种匿名调用有什么好处吗? 有,匿名对象调用完毕就是垃圾.可以被 ...