【hdu 6444】Neko's loop

【链接】 我是链接,点我呀:)
【题意】


给你一个序列.
你可以选择起点i。
然后每次往右跳k次。
得到下一个值a[i+k];。
问你跳m次能得到的最大值ma是多少。
如果>=s输出0
否则输出s-ma;

【题解】


最后肯定会形成gcd(n,k)个环的。
对于每个环(长度为cnt。
预处理出从1..2cnt的前缀和C[2*cnt](当成链处理就好
枚举它从起点i开始。
然后考虑它会怎么走?
1.如果c[cnt]>0,temp1加上m/cnt
C[cnt],然后对于剩余的m%cnt次走的机会。
求出c[i-1..i+m%cnt-1]这一段的最大值get_ma,减去c[i-1]就是剩余的m%cnt次能走出来的最大值了。即temp1+=get_ma-c[i-1];
temp = max(temp,temp1)
2.如果m>=cnt,那么还有一种可能,就是剩余的最后一圈留着不走完整圈,而只取一个最大的值,这个时候
如果c[cnt]>0,temp2+=(m/cnt - 1)*C[cnt],然后我们还留了一圈,也即cnt次机会可以走
则求出c[i-1..i+cnt-1]这一段的最大值get_ma2,然后再减去c[i-1]就是剩余的cnt次能走出来的最大值了,即temp2+=get_ma2-C[i-1]
temp = max(temp,tepm1)
对于每个起点i。都求出temp1,tepm2
最后return temp
就是当前这个环上走m次能得到的最大值了。
枚举所有的环取最大的temp就是答案了

【代码】


#include <bits/stdc++.h>
#define LL long long
using namespace std;const int N = 1e4;
const int M = 15;int n,m,k;
LL s;
int a[N+10],b[N*2+10],cnt;
LL c[N*2+10],mi[N*2+10][M+5];
int vis[N+10];LL get_ma(int l,int r){int len = r-l+1;len = log2(len);return max(mi[l][len],mi[r-(1<<len)+1][len]);
}LL ok(){c[0] = 0;for (int i = 1;i <= cnt;i++)c[i] = b[i],c[i+cnt] = b[i];for (int i = 1;i <= 2*cnt;i++) c[i]+=c[i-1];for (int i = 0;i <= 2*cnt;i++) mi[i][0] = c[i];for (int L = 1;L<=M;L++)for (int i = 0;i <= 2*cnt;i++){if (i+(1<<L)-1>2*cnt) break;mi[i][L] = max(mi[i][L-1],mi[i+(1<<(L-1))][L-1]);}LL temp = 0;for (int i = 1;i <= cnt;i++){LL temp1 = 0;//第一种情况.//如果环的和大于0就尽量用if (c[cnt]>0) temp1 += 1LL*m/cnt*c[cnt];int rest = m%cnt;if (rest>0) temp1+=get_ma(i-1,i+rest-1)-c[i-1];LL temp2 = 0;//第二种情况//留cnt个if (m>=cnt){if (c[cnt]>0) temp2 += 1LL*(m-cnt)/cnt*c[cnt];temp2+=get_ma(i-1,i+cnt-1)-c[i-1];}temp = max(temp,temp1);temp = max(temp,temp2);}return temp;
}int main()
{//freopen("D:\\rush.txt","r",stdin);ios::sync_with_stdio(0),cin.tie(0);int T;cin >> T;int kk = 0;while (T--){cin >> n >> s >> m >> k;for (int i = 1;i <= n;i++) cin >> a[i];for (int i = 1;i <= n;i++) vis[i] = 0;LL ans = 0;for (int i = 1;i <= n;i++)if (vis[i]==0){cnt = 0;for (int j = i;vis[j]==0;j = (j+k)>n?(j+k-n):j+k){cnt++;b[cnt] = a[j];vis[j] = 1;}ans = max(ans,ok());}cout<<"Case #"<<++kk<<": ";if (s<ans)cout<<0<<endl;elsecout<<s-ans<<endl;}return 0;
}

转载于:https://www.cnblogs.com/AWCXV/p/9698652.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高性能MySQL之Count统计查询

近一段时间&#xff0c;有同事问我 “MySQL执行count很慢&#xff0c;有没有什么优化的空间”。当时在忙&#xff0c;就回复了一句“innodb里面count统计都是实时统计&#xff0c;慢一些是正常的”&#xff0c; 周末闲暇下来&#xff0c;想到以前有好多人都问过关于count的问题…

js转换字符串为base64位

在window对象下有两个api,可以对ASCII编码进行编译,得到base64位的字符串 btoa:编码为base64atob:解码为ASCII码此种方法不能对中文进行操作,因为ASCII码中没有中文,如果编码会得到乱码 要编码中文可以先用encodeURIComponent() 对字符串进行转义,转义后再btoa()成base64就可以…

java 文件下载,中文表名,中文内容

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 RequestMapping("userDownloadTemplet")private void userDownloadTemplet(HttpServletRequest request,HttpServletResponse …

cherry-pick的用法

简述 git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如&#xff0c;假设我们有个稳定版本的分支&#xff0c;叫v2.0&#xff0c;另外还有个开发版本的分支v3.0&#xff0c;我们不能直接把两个分支合并&#xff0c;这样会导致稳定版本混乱&#xff0c…

Docker 二进制安装docker

https://blog.csdn.net/bruce_yds/article/details/80035714转载于:https://www.cnblogs.com/Presley-lpc/p/9698724.html

264,avs重要的变量:

B帧&#xff1a; B8pdir[i] i为0,1,2,3&#xff1b;值的含义&#xff1a;0&#xff1a;前向 &#xff1b;1&#xff1a;后向&#xff1b;2&#xff1a;双向&#xff1b;如果为intra_block,则为-1. B8mode[i] i为0,1,2,3 &#xff0c;值的含义&#xff1a;1:16x16 2:16x8 3…

insert into 语句的三种写法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 insert into 语句的三种写法 方式1、 INSERT INTO t1(field1,field2) VALUE(v001,v002); // 明确只插入一条Value 方式2、 IN…

Linux系统中跟TCP相关的内核参数

1. TCP保活机制 参考 《Nginx(三) 配置文件详解 - 基础模块》3.18章节 net.ipv4.tcp_keepalive_intvl&#xff1a;设置两次相邻探活检测的间隔时间。默认是75秒&#xff0c;单位是秒。net.ipv4.tcp_keepalive_probes&#xff1a;设置探活最多检测次数。默认是9次&#xff0c;单…

ECMAScript3中数组方法

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>ECMAScript3中数组方法</title></head><body><script>//字符串和数组之间相转换的方法 1.join() split() /*var str abcdefg…

implements Serializable

Serializable是一个对象序列化的接口&#xff0c;一个类只有实现了Serializable接口&#xff0c;它的对象才是可序列化的。因此如果要序列化某些类的对象&#xff0c;这些类就必须实现Serializable接口。而实际上&#xff0c;Serializable是一个空接口&#xff0c;没有什么具体…

Codeforces 1045. A. Last chance(网络流 + 线段树优化建边)

题意 给你 \(n\) 个武器&#xff0c;\(m\) 个敌人&#xff0c;问你最多消灭多少个敌人&#xff0c;并输出方案。 总共有三种武器。 SQL 火箭 - 能消灭给你集合中的一个敌人 \(\sum |S| \le 100000\) &#xff1b;认知光束 - 可以消灭 \([l, r]\) 区间中的一个敌人&#xff1b;O…

常用宏定义 - 系统相关

/** 是否iPad */ #define isPad (UI_USER_INTERFACE_IDIOM() UIUserInterfaceIdiomPad)/** 是否iPad */ #define someThing (UI_USER_INTERFACE_IDIOM() UIUserInterfaceIdiomPad)? ipad: iphone/** 获取系统版本 */ #define IOS_VERSION &#xff3b;[UIDevice currentDevi…

周鸿祎详解360手机战略:赚钱不靠硬件靠服务

摘要&#xff1a;奇虎360总裁周鸿祎不久前在微博上宣布360公司将要进军手机行业的消息后&#xff0c;一度掀起业界的轩然大波&#xff0c;褒贬之声均不绝于耳。对于合作厂商的选择&#xff0c;周鸿祎直言出货量是一个重要参考指标&#xff0c;“每年的出货量最少不低于500万~10…

解决报错:;Syntax error on token(s), misplaced construct(s)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错如题&#xff0c;这是语法错误&#xff0c;如括号不匹配、代码没有写在一个方法中、少分号、变量名不对、少半个大括号 ... 总之就…

java移位运算符

java中有三种移位运算符 << : 左移运算符&#xff0c;num << 1 相当于num乘以2 >> : 右移运算符&#xff0c;num >> 1 相当于num除以2 >>> : 无符号右移&#xff0c;忽略符号位&#xff0c;空位都以0补齐…

在页面上显示PDF

/// <summary>/// 读取PDF文件/// </summary>/// <param name"fName">文件名称(可以从其他地方传进来)</param>/// <returns></returns>public FileStreamResult readPDF(string fName "pdf文件.pdf"){string dirp …

7.15模拟赛

T1.fuction 吐槽一波错误拼写。 跟考场思路差不多&#xff0c;只不过细节挺多的呢。 判掉a0,b0,c0的几种组合&#xff0c;还有负数的情况要打标记特殊处理。 然后就是一个拓欧啦&#xff0c;先求出ggcd(a,b)&#xff0c;顺便求出axbyg的x和y&#xff0c;然后根据裴蜀定理&#…

苏宁国美盈利报警:线下乏力线上重金加码

摘要&#xff1a;国美电器则发布盈利预警&#xff0c;预计今年一季度净利润同比大幅减少———这也致使国美股价最近连续低位徘徊。苏宁电器一季报显示&#xff0c;今年1至3月公司营业收入226 .41亿元&#xff0c;同比增长10%&#xff0c;但盈利9.51亿元&#xff0c;同比下降15…

WebService到底是什么?

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、序言 大家或多或少都听过WebService&#xff08;Web服务&#xff09;&#xff0c;有一段时间很多计算机期刊、书籍和网站都大肆的提…

JAVA中PO,VO,DTO,BO,DAO,POJO解释

&#xff08;一&#xff09;VO与PO ORM是Object Relational Mapping&#xff08;对象关系映射&#xff09;的缩写。通俗点讲&#xff0c;就是将对象与关系数据库绑定&#xff0c;用对象来表示关系数据。在O/R Mapping的世界里&#xff0c;有两个基本的也是重要的东东需要了解&…