K-Kabaleo Lite

题目大意:

给出每种菜品的利润以及碟数,要求我们给每个客人至少一碟菜,要求从1号菜品开始给,给的菜品的号码是连续的,每个客人同号码的菜都只能给一碟。求能招待客人的最大数量以及在客人最多的情况下能获得的最大利润。

解题思路:

1.首先,因为要求从1号菜品开始给,所以能招待的客人的最大数量就是1号菜品的碟数。

2.用结构体记录1-x号菜品各一碟可以获得的利润以及x的位置,后续按照利润从大到小的顺序对结构体进行排序。

3.给客人的菜一定是1-x各一盘这种情况,可以用一个time数组对能够上几次1-x的菜进行计数,time[x]即1-x中b[x]的最小值。

4.对结构体排序之后进行遍历,每次用最大的利润乘以相应的time数组值,再模拟该操作对其他菜品的影响,多次相加之后得到答案。

坑点:

1.数据很大所以要用__int128,用long long的话只能得到75分orz

2.解题思路第四步如果直接模拟复杂度是O(n^2),会T掉,可以用两个变量来记录影响(详见代码54-63行),复杂度会变成O(n)。

代码如下:

 #include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct noid{
int loc;//x的值
long long sum;//1-x菜各一碟利润总和
}e[];
bool cmp(struct noid a,struct noid b)
{
return a.sum>b.sum;
}
//输入
inline __int128 read()
{
int X=,w=; char ch=;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
//输出
inline void print(__int128 x)
{
if(x<){putchar('-');x=-x;}
if(x>) print(x/);
putchar(x%+'');
}
int main()
{
int i,j,t,n,k,now,nowt;
__int128 a[],b[],time[],ans;
scanf("%d",&t);
for(i=;i<=t;i++)
{
ans=;
scanf("%d",&n);
e[].sum=;
for(j=;j<=n;j++)
{
a[j]=read();
e[j].sum=e[j-].sum+a[j];
e[j].loc=j;
}
for(j=;j<=n;j++)
{
b[j]=read();
if(j==)
time[]=b[];
if(j>)
time[j]=min(time[j-],b[j]);//求1-j菜品最小值,即1-j能给几次客人
}
sort(e+,e++n,cmp);//对利润进行排序
nowt=;now=;
for(j=;j<=n;j++)
{
if(e[j].loc>=now)//因为now前面的菜品一定会出现部分空缺,位置在now后面上不了菜
continue;
ans=ans+e[j].sum*(time[e[j].loc]-nowt);//把该顺序菜品全部上完
now=e[j].loc;//记录目前的位置
nowt=time[e[j].loc];//记录当前1号菜品被消耗的次数
if(nowt==b[])//判断优化,减少时间
break;
}
if(i==t)
{
printf("Case #%d: %lld ",i,b[]);
print(ans);
}
else
{
printf("Case #%d: %lld ",i,b[]);
print(ans);
printf("\n");
}
}
return ;
}

__int128输入输出的板子转载自:https://blog.csdn.net/weixin_43693379/article/details/100166593 感谢大佬分享,如有侵权会立即删除

PS:第一次写博客真的感觉到自己表达能力过于薄弱了...很多地方表达上都有问题,如果还有哪里我说的不明白欢迎提问!感谢你的阅读!

2020牛客暑期多校训练营(第八场)K-Kabaleo Lite题解的更多相关文章

  1. 2020牛客暑期多校训练营(第一场)H Minimum-cost Flow

    Minimum-cost Flow 题目:给n个点,m条边.接下来m行包含(a,b,c),即a,b之间有单位流量代价为c的边.接下来有q个问题,每个问题给定(x,y),即假设每条边的容量为x/y时,从 ...

  2. 2020牛客暑期多校训练营(第二场) Boundary

    传送门:Boundary  题意:给你n个点的坐标,问最多有多少个点可以在同一个圆上,(0,0)必须在这个圆上. 题解:三个点确定一个圆,所以暴力枚举两个点和(0,0)组成的圆,如果三个点不共线的话, ...

  3. 2020牛客暑期多校训练营(第一场)Easy Integration

    传送门:J. Easy Integration 题意:给你n,求这个积分,最后的结果分子是记为p,分母记为q. 求(p*q-1)mod 998244353. 题解:比赛完看到巨巨说这是贝塔函数,我一搜 ...

  4. 2020牛客暑期多校训练营 (第二场) All with Pairs

    传送门:All with Pairs 题意:给你n个字符串,求出,f(si,sj)的意思是字符串 si 的前缀和字符串 sj 后缀最长相等部分. 题解:先对所有的字符串后缀hash,用map记录每个h ...

  5. 2020牛客暑期多校训练营(第二场)Fake Maxpooling

    传送门:Fake Maxpooling 题意:给出矩阵的行数n和列数m,矩阵 Aij = lcm( i , j )  ,求每个大小为k*k的子矩阵的最大值的和. 题解:如果暴力求解肯定会t,所以要智取 ...

  6. 2020牛客暑期多校训练营(第二场) F.Fake Maxpooling (单调队列)

    题意:有一个\(n\)x\(m\)的矩阵,\(A_{i,j}=lcm(i,j)\),对于每个\(k\)x\(k\)的子矩阵,其最大元素贡献给答案,求答案的最大值. 题解:矩阵构成我们直接\(i*j/g ...

  7. 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)

    题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才 ...

  8. 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...

  9. 2019牛客暑期多校训练营(第一场) B Integration (数学)

    链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...

  10. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

随机推荐

  1. 【转】Hbuilder配置Avalon、Vue指令提示

    转载自CSDN http://blog.csdn.net/jianggujin/article/details/71419828 我本人是一名Java后端开发,偶尔也会研究一下前端内容,因为Hbuil ...

  2. 记一次线上服务CPU 100%的处理过程

    告警 正在开会,突然钉钉告警声响个不停,同时市场人员反馈客户在投诉系统登不进了,报504错误.查看钉钉上的告警信息,几台业务服务器节点全部报CPU超过告警阈值,达100%. 赶紧从会上下来,SSH登录 ...

  3. 解决nginx 出现 413:Request Entity Too Large

    去网上搜了一下,说是上传文件大小超过nginx的限制大小(nginx据说默认只能上传不超过2MB的文件) 解决方法: #nginx/conf/nginx.conf http { ... client_ ...

  4. python数据处理(三)之处理pdf文件

    代码以及资料 https://github.com/jackiekazil/data-wrangling 1.前言 尽可能地寻找可以替代pdf格式的数据 2.解析pdf的编程方法 安装slate pi ...

  5. 数据可视化之DAX篇(十)在PowerBI中累计求和的两种方式

    https://zhuanlan.zhihu.com/p/64418286 假设有一组数据, 已知每一个产品贡献的利润,如果要计算前几名产品的贡献利润总和,或者每一个产品和利润更高产品的累计贡献占总体 ...

  6. 前端02 /HTML标签

    前端02 /HTML标签 目录 前端02 /HTML标签 1.特殊字符 2.标签分类 标签嵌套 1.块级标签(行内标签) 1.1div标签(块标签) 1.2p标签(块标签) 2.内联标签 2.1 sp ...

  7. mysql中DDL库和表的管理

    #DDL /* 数据定义语言 库和表的管理 一.库的管理 创建.修改.删除 二.表的管理 创建.修改.删除 创建:create 修改:alter 删除:drop */ #一.库的管理 #1.库的创建 ...

  8. LINQ多表查询

    #region Group,Join //只有join,没有into,内联(inner join) //var sql = from c in sdb.Classic // join s in sdb ...

  9. 【API进阶之路】老板给我涨薪30%!如何通过SDK接口搞定千万级流量直播

    摘要:看我如何通过API Explorer 的SDK接口搞定千万级流量直播. 最近几个月,我的变化其实还蛮大的,从一个被实习生“无视”的“前浪”,转变成了不仅能够解决技术问题还能解决业务问题(顺手还能 ...

  10. Linux好学吗?怎么自学Linux?6个值得你去学习Linux的理由!

    两个多月前,我对日常工作做出了一个非常重要的决定-我决定从Windows切换到Linux,将其作为个人和办公笔记本电脑的主要系统.除了开始时一些小的驱动程序问题之外,切换非常平稳,我不会考虑返回.如果 ...