王者荣耀_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. ...
随机推荐
- 30岁后还能入IT行业吗?
前言 写这样的文章只想给那些准备改行想入IT行业的同学一点点建议,当然只做参考,我的个人经历. 我也是一个30岁改行进IT行业的程序猿.入这行也有一年多了吧.给我的感觉就是比较苦逼. 入行前的培训 进 ...
- 记录一次https证书申请失败的案例
部分站点由于使用了大量的域名,会导致 auto-ssl 配置的内存不够用,导致证书申请失败.需要做以下调整 nginx.conf 中 lua_shared_dict auto_ssl 调整为 128m ...
- Ubuntu安装卸载anaconda
安装要点: 1.在Anaconda官网https://www.continuum.io/downloads内下载需要的版本: 2.打开终端--进入下载安装包所在的文件夹(cd 文件名)--输入命令:b ...
- JavaScript笔记之第六天
JavaScript 库 JavaScript 库 - jQuery.Prototype.MooTools. jQuery jQuery 是目前最受欢迎的 JavaScript 框架. 它使用 CSS ...
- java并发之原子性
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp17 1.原子性操作: 不能被线程调度机制中断的操作:--对原子性变量的赋值 ...
- Mock Server 入门
Mock Server介绍 什么是mock ? 我在去年的时候介绍一篇幅 python mock的基本使用,http://www.cnblogs.com/fnng/p/5648247.html 主要是 ...
- Android学习记录:线程
在Java中,线程的建立方法如下. 新建一个类,接口Runnable,重载 run方法 import javax.swing.JTextField; public class test impleme ...
- §--------算法分界线--------§
如题 As said in the title~ 计算机的cpu计算从根源上由最基本的逻辑电路(晶体管)组成,由此衍生出最基本的数值运算:四则运算.而此后所有的高级算法都是建立在这个基本计算原理(逻辑 ...
- 【Beta】 第五次Daily Scrum Meeting
一.本次会议为第五次meeting会议 二.时间:10:00AM-10:20AM 地点:陆大楼 三.会议站立式照片 四.今日任务安排 成员 昨日任务 今日任务 林晓芳 帮助完善登录界面 对目前完成的模 ...
- 第07周-集合与GUI
1. 本周作业简评与建议 本周8分以上的同学有32人(占1/4),其中9分以上的同学有13人(占1/10).大作业未完成的最高评分一般高于6分.被认定为抄袭的为-10分.请大家认真完成大作业,后面每周 ...