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. git clone远程仓库的指定分支

    正常clone方式 git clone <远程仓库地址> 默认clone的是远程仓库的master分支 clone指定分支 git clone -b <分支名> <远程仓 ...

  2. 从零开始学Electron笔记(三)

    在之前的文章我们介绍了一下Electron的菜单创建和事件绑定,其中提到了一个remote模块,接下来我们继续说一下Electron的这个remote模块. 官方关于remote模块的地址:https ...

  3. meta viewport相关

    <!DOCTYPE html> H5标准声明,使用 HTML5 doctype,不区分大小写 <head lang=”en”> 标准的 lang 属性写法 <meta c ...

  4. java 数据结构(七):Collection接口

    1.单列集合框架结构|----Collection接口:单列集合,用来存储一个一个的对象* |----List接口:存储序的.可重复的数据. -->“动态”数组* |----ArrayList. ...

  5. python 并发 ThreadPoolExecutor

    正文:Executor是一个抽象类,子类: ThreadPoolExecutor和ProcessPoolExecutor ,一个线程池,一个进程池. future对象:在未来的某一时刻完成操作的对象. ...

  6. Django- 开发通用且万能的的权限框架组件

    本节内容 需求讨论 权限设计 代码设计 自定义权限钩子 业务场景分析 假设我们在开发一个培训机构的 客户关系管理系统,系统分客户管理.学员管理.教学管理3个大模块,每个模块大体功能如下 客户管理销售人 ...

  7. Burp Suite Scanner Module - 扫描模块

    Burp Suite Professional 和Enterprise Version的Scaner功能较丰富. 以Professional版本为例,包含Issue activity, Scan qu ...

  8. Ethical Hacking - NETWORK PENETRATION TESTING(16)

    ARP Poisoning - MITMf MITMf is a framework that allows us to launch a number of MITM attacks. MITMf ...

  9. Web Scraping using Python Scrapy_BS4 - Software

    Install the following software before web scraping. Visual Studio Code Python and Pip pip install vi ...

  10. 五大高效的PDF文件搜索引擎

    当你花了半个多小时在线搜索PDF文档,却发现您找到的文档都不是您需要的PDF格式.如前说述,您可以先打开PDF文档查看是不是PDF格式的,然后再到web浏览器中下载该文档.那么,为了确保您获得的文档是 ...