王者荣耀_KEY
WZRY
为了排位赛的Cjj神,最近耗尽气力来打WZRY。
Cjj神最近有N局预约的排位赛,其中第i局需要耗时Li的时间。因为浓浓的Gay情,Cjj神不能改变这些排位赛的的顺序。作为一个很有(mei)自制力的人,Cjj神计划用M+1天打完N局,为了能够活着见到第M+2天的太阳,他希望耗时最长的一天最短。
每天最少打一局。
请告诉他这个值是多少,以使他判断他是否能活下来;并且告诉他在总时长最长一天等于这个最小值的情况下有多少种方案,以使他判断他活下来的概率是多少。
输入格式:
第一行两个整数N,M。
接下来N个整数Li。
输出格式:
一行两个数,第一个是总时长最长的一天的最小值,第二个数是方案总数,对10,007取模。
数据范围:
10%:N<=25
30%:N<=300
60%:N<=10000
100%:N<=50000,0<=m< n,m<1000,1<=Li<=1000
这道题有两问,第一问可以很简单地用二分+贪心解决。
但第二问呢?
首先这道题的普通暴力DP是很好想到的,设f[i][j]为第i天,打了j局比赛的方案总数。
很显然f[i][j]=∑f[i-1][k](sum[j]-sum[k]<=ans)
sum为Li的前缀和。
奉上暴力代码:
#include <bits/stdc++.h>
#define mod 10007
using namespace std;
inline char tc(){
static char fl[],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,,,stdin),A==B)?EOF:*A++;
}
inline int read(){
char c;
while(!isdigit(c=tc()));int x=c-'';
while(isdigit(c=tc()))x=x*+c-'';
return x;
}
int n,m,a[],mx,ans,ww,f[][],sum[];
int check(int x){
int tot=,last=x,d=;
for(int i=;i<=n;i++)
if(last>=a[i])last-=a[i];
else d++,last=x-a[i];
return d<=m;
}
int main(){
n=read(),m=read();m++;
for(int i=;i<=n;i++)a[i]=read(),mx=max(mx,a[i]),ww+=a[i],sum[i]=sum[i-]+a[i];
int L=mx,R=ww;
while(L<=R){
int mid=L+R>>;
if(check(mid))R=mid-,ans=mid;
else L=mid+;
}//二分,第一问
for(int i=;i<=m;i++){f[i-][]=;
for(int j=i;j<=n;j++){
for(int k=i-;k<j;k++)
if(sum[j]-sum[k]<=ans)
f[i][j]=(f[i][j]+f[i-][k])%mod;
}
}
int tot=;
for(int i=;i<=m;i++)tot=(tot+f[i][n])%mod;
printf("%d %d",ans,tot);
}
暴力
这个O(M*N^2)的效率一定会超时,所以我们要对暴力优化。
仔细看这个暴力,不难发现其实是一个不停枚举j和k边界的过程。
又想到我们知道最大耗时的最小值,那么就可以在已知k便边界的情况下通过预处理求出j边界的值。
设pre[i]表示第i局最远可以由哪一局转移过来。
那么只需枚举k加前缀和维护f数组的值就可以得到O(MN)的算法了。
但通过观察数据可得内存会炸,由于有前缀和维护,只需要每次i做完1次时将f清零即可。
code:
#include <bits/stdc++.h>
#define mod 10007
#define ll long long
using namespace std;
inline char tc(){
static char fl[],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,,,stdin),A==B)?EOF:*A++;
}
inline int read(){
char c;
while(!isdigit(c=tc()));int x=c-'';
while(isdigit(c=tc()))x=x*+c-'';
return x;
}
int n,m,a[],mx,ans,ww,f[];
int sum[],pre[],d[];
int check(int x){
int tot=,last=x,d=;
for(int i=;i<=n;i++)
if(last>=a[i])last-=a[i];
else d++,last=x-a[i];
return d<=m;
}
int main(){
n=read(),m=read();m++;
for(int i=;i<=n;i++)a[i]=read(),mx=max(mx,a[i]),ww+=a[i],sum[i]=sum[i-]+a[i];
int L=mx,R=ww;
while(L<=R){
int mid=L+R>>;
if(check(mid))R=mid-,ans=mid;
else L=mid+;
}
for(int i=;i<=n;i++){int sum=;
for(int j=i;j>;j--){
if(sum+a[j]<=ans)sum+=a[j];
else {pre[i]=j;break;}
}
}//预处理pre
for(int i=;i<=n;i++)d[i]=;
int tot=;
for(int i=;i<=m;i++){
for(int j=i;j<=n;j++){
if(pre[j]>)f[j]=(f[j]+d[j-]-d[pre[j]-])%mod;
else f[j]=(f[j]+d[j-])%mod;
}d[]=;
tot=(tot+f[n])%mod;
for(int j=;j<=n;j++)d[j]=(d[j-]+f[j])%mod,f[j]=;//维护,清零
}
tot=((tot+mod)%mod+mod)%mod;
printf("%d %d",ans,tot);
}
AC
王者荣耀_KEY的更多相关文章
- 王者荣耀是怎样炼成的(一)《王者荣耀》用什么开发,游戏入门,unity3D介绍
在国内,如果你没有听说过<王者荣耀>,那你一定是古董级的人物了. <王者荣耀>(以下简称“农药”),专注于移动端(Android.IOS)的MOBA游戏.笔者看到这么火爆,就萌 ...
- CyclicBarrier的使用之王者荣耀打大龙
最近一直整并发这块东西,顺便写点Java并发的例子,给大家做个分享,也强化下自己记忆,如果有什么错误或者不当的地方,欢迎大家斧正. LOL和王者荣耀的玩家很多,许多人应该都有打大龙的经历,话说前期大家 ...
- Unity 使用 陀螺仪 实现 《王者荣耀》 登入界面 背景动态效果
在 <王者荣耀> 登入界面 左右上下晃动手机(有些手机不支持)可以看到背景在变化 我使用的是iPhone SE 效果如下: 对比两张图片的左下角 可以看到差异 至于为什么要这么做: 1.使 ...
- CNN网络介绍与实践:王者荣耀英雄图片识别
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者介绍:高成才,腾讯Android开发工程师,2016.4月校招加入腾讯,主要负责企鹅电竞推流SDK.企鹅电竞APP的功能开发和技术优化工作 ...
- 浅谈canvas绘画王者荣耀--雷达图
背景: 一日晚上下班的我静静的靠在角落上听着歌,这时"滴!滴!"手机上传来一阵qq消息.原来我人在问王者荣耀的雷达图在页面上如何做出来的,有人回答用canvas绘画.那么问题来了, ...
- 用python的requests第三方模块抓取王者荣耀所有英雄的皮肤
本文使用python的第三方模块requests爬取王者荣耀所有英雄的图片,并将图片按每个英雄为一个目录存入文件夹中,方便用作桌面壁纸 下面时具体的代码,已通过python3.6测试,可以成功运行: ...
- PYTHON-面向对象-练习-王者荣耀 对砍游戏
# 王者荣耀 对砍游戏# 两个英雄可以对砍 如果血量小于等于0 就GG# 所需的对象# 英雄对象""" 亚瑟 属性 类型 血量 名称 技能 Q 跳起来给你一刀 伤害50 ...
- 王者荣耀里拿个王者有啥了不起,有胆就来挑战一下ApsaraCache源码
王者荣耀大家估计都玩的很溜吧,撸完代码开一局,只要不遇到个猪队友,拿个鲁班后羿估计你们都能爆掉对手的塔吧.大神们打个排位赛拿个王者就和吃饭夹菜一样简单... But...你们玩过Redis和Memca ...
- Beta周第14次Scrum会议(11/23)【王者荣耀交流协会】
一.小组信息 队名:王者荣耀交流协会 小组成员 队长:高远博 成员:王超,袁玥,任思佳,王磊,王玉玲,冉华 小组照片 二.开会信息 时间:2017/11/23 17:02~17:14,总计12min. ...
随机推荐
- Yii2 关于yii\db\Connection::open耗时很久的问题(1000ms左右)
关于这个问题我纠结了很久,每次打开网页yii\db\Connection::open几乎都耗时1000ms. 其实这个问题很好解决:只要把config\db.php配置信息里的localhost,改成 ...
- spring的Java配置入门(Spring Boot学习笔记之一)
spring的Java配置 1.创建maven项目 使用idea创建maven项目,这里顺便提一下,idea真的比eclipse好用,早点熟悉吧.然后就是maven是java项目管理最主流的工具,自己 ...
- DOM 对象方法
DOM 对象方法 这里提供一些您将在本教程中学到的常用方法: 方法 描述 getElementById() 返回带有指定 ID 的元素. getElementsByTagName() 返回包含带有指定 ...
- web前端笔记整理一---HTML
一 HTML标签1 页面及标记 1 HTML 文件结构 拓展名 .html或者.htm <!DOCTYPE html>// 声明 <html> html 主体 <head ...
- Maven详解(五)------ 坐标的概念以及依赖管理
我们知道maven能帮我们管理jar包,那么它是怎么管理的呢?这篇博客我们来详细介绍. 1.什么是坐标? ①.数学中的坐标 在平面上,使用 X .Y 两个向量可以唯一的定位平面中的任何一个点 在空间中 ...
- C# 实现模拟登录功能,实现公共类分享。
前言 最近在研究模拟登录的各种方法, 主要想要实现的两个功能是: 1.点击按钮可以直接跳转并登录到某一个系统中. 2.抓取某一个系统中某一个页面中的特定数据. 为此在网上查了许多的资料,首先了解到自身 ...
- 数据结构-二叉树 C和C++实现
二叉树,指针域具有两个下一节点的特殊链表结构. 先来看看它的结构 (此处补图) 来看程序中需要使用到的概念: 树根:二叉树的第一个节点 子树:对于某一个节点指针域指向的节点,左指针指向的节点为左子节点 ...
- Java常见算法整理
兔子问题(斐波那契数列规律) 台阶问题 (兔子问题变种,递归规律) 素数问题(判断素数.质数方式) 水仙花数问题(数字分解) 查找算法(二分查找) 排序算法(选择排序,冒泡排序,快速排序) 兔子问题, ...
- java‘小秘密’系列(三)---HashMap
java'小秘密'系列(三)---HashMap java基础系列 java'小秘密'系列(一)---String.StringBuffer.StringBuilder java'小秘密'系列(二)- ...
- 十条最有效的PCB设计黄金法则
十条最有效的PCB设计黄金法则 尽管目前半导体集成度越来越高,许多应用也都有随时可用的片上系统,同时许多功能强大且开箱即用的开发板也越来越可轻松获取,但许多使用案例中电子产品的应用仍然需要使用定制PC ...