题解【Luogu6022 快乐水】
\]
大概在半年前出过这道(((
然后当天读完这题,把自己写的 std 改了一下 ll 和特判信息交上去就 A 了。
捡了个大便宜。
\]
你一开始有 \(n\) 瓶快乐水。
有 \(m\) 个附属品,每喝一瓶快乐水就可以得到这 \(m\) 个附属品各 \(1\) 个,若有 \(a[i]\) 个附属品 \(i\) ,就可以再换一瓶快乐水。
问一共可以喝多少瓶快乐水。若可以无限白嫖就输出 Inf 。
\]
一瓶一瓶处理快乐水显然是会 TLE 的,所以我们要批量处理快乐水。
\(~\)
我们开个桶 cnt[x] 表示 " 附属品 \(x\) 的数量 " 。
每次我们批量处理当前的 \(n\) 瓶快乐水:
- 令
ans += n,表示喝掉了当前的 \(n\) 瓶快乐水。 - 令
cnt[i] += n,表示得到了这 \(m\) 个附属品各 \(n\) 个。 - 令
n += cnt[i] / a[i], cnt[i] %= a[i],表示用把能换的快乐水都换了。
直到 \(n=0\) ,此时 \(ans\) 就是所求。
\(~\)
当然,还有无限白嫖快乐水的情况,在该情况下,\(n\) 永远不会等于 \(0\) ,也就是说快乐水会越喝越多了。
稍加分析一下我们发现:**若不能无限白嫖,在任意时刻快乐水的数量不会大于等于初始给出的 \(n\) **。
想想看,如果可以无限白嫖,就相当于说,你用 \(n\) 瓶快乐水经过若干轮变换,换到了 \(k\) \((n \leq k)\) 瓶快乐水,那你再在这 \(k\) 瓶快乐水中选出 \(n\) 瓶快乐水再进行若干轮变换,又可以得到 \(k\) 瓶快乐水,如此往复,你总是可以白嫖快乐水。
于是就可以用上述性质判断是否无限白嫖快乐水了。
\]
#include<cstdio>
#define RI register int
using namespace std;
inline int read()
{
int x=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-f;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
return x*f;
}
const int N=100100,M=10;
int n,m,lim;
int a[N],cnt[M];
long long ans;
int main()
{
n=read(),m=read();
lim=n;
for(RI i=1;i<=m;i++)
a[i]=read();
while(n)
{
ans+=n;
for(RI i=1;i<=m;i++)
cnt[i]+=n;
n=0;
for(RI i=1;i<=m;i++)
n+=cnt[i]/a[i],cnt[i]%=a[i];
if(n>=lim)
{
puts("Inf");
return 0;
}
}
printf("%lld\n",ans);
return 0;
}
\]
题解【Luogu6022 快乐水】的更多相关文章
- Codeforces Round #352 (Div. 2),A题与B题题解代码,水过~~
->点击<- A. Summer Camp time limit per test 1 second memory limit per test 256 megabytes input s ...
- 题解-UOJ284 快乐游戏鸡
Problem uoj 题意大意: 一棵树,点权\(w_i\),每次玩家可以在树上行走,一条边需要\(1\)的时间,只能往儿子走.每次游戏需要从\(s\)到\(t\). 玩家有一个总死亡次数,初始为\ ...
- 华东交通大学2018年ACM“双基”程序设计竞赛部分题解
链接:https://ac.nowcoder.com/acm/contest/221/C来源:牛客网 C-公式题(2) 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...
- Codeforces Round #368 (Div. 2) A. Brain's Photos (水题)
Brain's Photos 题目链接: http://codeforces.com/contest/707/problem/A Description Small, but very brave, ...
- Codeforces Round #339 (Div. 2) A. Link/Cut Tree 水题
A. Link/Cut Tree 题目连接: http://www.codeforces.com/contest/614/problem/A Description Programmer Rostis ...
- codevs 2495 水叮当的舞步IDA*
/* 比较简单的A* 估价函数很简单就是除了左上角的联通快之外的不同的个数 加上迭代 好像答案最多在16步之内出解 这样裸裸的交上去是50分 在考虑剪枝 每个选颜色的时候一定是选左上角联通快附近的颜色 ...
- What Is Your Grade?(水,排序)
What Is Your Grade? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- [Usaco2008 Open] Clear And Present Danger 寻宝之路[最短路][水]
Description 农夫约翰正驾驶一条小艇在牛勒比海上航行. 海上有N(1≤N≤100)个岛屿,用1到N编号.约翰从1号小岛出发,最后到达N号小岛.一 张藏宝图上说,如果他的路程上 ...
- [Usaco2008 Dec]Hay For Sale 购买干草[01背包水题]
Description 约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草. 顿因有H(1≤H≤5000)包 ...
随机推荐
- 使用JavaMail发送邮件(含文本/附件/图片)的工具类
记录利用公司内搭建的smtp邮件服务器,使用javax mail发送邮件的程序 package com.test.mailTest; import java.util.Date; import jav ...
- Quartz.NET总结(八)如何根据自己需要配置Topshelf 服务
前面讲了如何使用Topshelf 快速开发windows服务, 不清楚的可以看之前的这篇文章:https://www.cnblogs.com/zhangweizhong/category/771057 ...
- kettle连接oracle数据库报错,ORA-12505
报错信息: Error connecting to database: (using class oracle.jdbc.driver.OracleDriver) Listener refused t ...
- Spring Boot 入门(十一):集成 WebSocket, 实时显示系统日志
以前面的博客为基础,最近一篇为Spring Boot 入门(十):集成Redis哨兵模式,实现Mybatis二级缓存.本篇博客主要介绍了Spring Boot集成 Web Socket进行日志的推送, ...
- SpringCloud之Eureka(注册中心集群篇)(三)
一:集群环境搭建 第一步:我们新建两个注册中心工程一个叫eureka_register_service_master.另外一个叫eureka_register_service_backup eurek ...
- 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第一节:HTTP协议数据采集
首先欢迎您来到本书的第二境,本境,我们将全力打造一个实际生产环境可用的爬虫应用了.虽然只是刚开始,虽然路漫漫其修远,不过还是有点小鸡冻:P 本境打算针对几大派生类做进一步深耕,包括与应用的结合.对比它 ...
- JS对JSON的使用【转】
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味 ...
- Knative 简介
原文地址:https://yq.aliyun.com/articles/658800
- 共享excel工作簿
- 现在啊还不太清楚 nodejs和coffeescript 的关系
我怎么会思考这个问题,今天看到用coffeescript做的一个服务引导 挺好 看博客里提 安装node之后 呢 npm 可以安装coffeescript 难道 coffee 是 node的 一个方言 ...