杭州集训Day5

下面是Day5的题目!(其实都咕了好几天了

100+70+40=210.


 

T1 皇后 XY 的疑难 (1s 512MB)

1.1 题目描述
有一个n*n的王国城堡地图上,皇后XY喜欢看骑士之间的战斗,于是他准备布置m个骑士,其中
每一个骑士都可以向8个方向,上、下、左、右、左上、左下、右上、右下移动若干距离。且每一个骑士都可以攻击他八个方向上离它最近的骑士。
皇后XY等不及看骑士之间的对决,但他又担心骑士的安危,她想提前知道每一个骑士会被从几个方向攻击到,设为 s。很显然 s 属于[0,8] 。最后要求出来 num[0],num[1] ……num[8] 九个数,表示有多少骑士被攻击到0次,1次……8次。 数据保证m个骑士中任意两个不在同一个位置。
1.2 输入格式
第一行两个正整数 n,m(n,m≤105),然后接下来m行,每一行x[i],y[i] 分别表示第i个骑士的
横坐标和纵坐标。1≤x[i],y[i]≤n。
1.3 输出格式
一行9个整数,分别为 num[0],num[1]……num[8] ,两个数中间用空格隔开。
1.4 样例输入
8 4
4 3
4 8
6 5
1 6
1.5 样例输出
0 3 0 1 0 0 0 0 0
1.6 数据约定
对于 30%的数据,n,m≤1000。
对于 60%的数据, n≤100000,m≤1000。
对于 100%的数据, n,m<=100000,1≤x[i],y[i]≤n 。
这不就是皇后的攻击方式吗
所以我们很容易想到“八皇后”那题的写法
就是用四个数组分别存每行,每列,每个左斜线(x-y),每个右斜线(x+y)的骑士个数
但是这题要求每个骑士八个方向上有没有别的骑士
就不能只用四个数组了
要用八个数组存八个方向的最大值
比如说第i列的最上面的骑士和最下面的骑士的纵坐标
这样的话在这一列的骑士的纵坐标如果大于最下面的就说明他不是最下面的
说明他下面还有人
如果其纵坐标小于最上面的就说明他不是最上面的
也就说明他上面还有人
然后注意下左斜线的x-y不能为负数,所以统一加个N即可(还要注意下数组大小
很简单的一题,时间复杂度为O(n)

T2 快来 pick sxk(1s 512MB)

2.1 题目描述
千古神犇邵徐坤 sxk,他现在利用自己猴子的属相变成了n个会打篮球的分身,每个会打篮球的分身都
有一个鸡儿你真美值,这些分身是乱序的。
你需要将其按鸡儿你真美值从小到大排序,每次你可以将一个分身揪到任意一个位置(某两个分身中
间),代价是你要掉该分身的鸡儿你真美值的毛。
为了不变成sxk这样的聪明"绝顶"的大猴子,你要以尽量少的代价完成这个任务,你需要回答每一次
分身后你会掉的最少毛数。
2.2 输入格式
从文件pick.in中读入数据。
数据的第1行包含一个非负整数t表示sxk分身的次数。
对于每一组数据
第1行包含一个非负整数n表示分身的个数
第2行包含n个数,ai表示第i个分身的鸡儿你真美值
2.3 输出格式
输出到文件pick.out中。
对于每一个询问输出一个整数,表示你最少会掉的毛数
2.4 样例输入
2
5
5 7 2 8
5
6 5 4 3 
2.5 样例输出
11
18
2.6 数据约定
对于30%的数据满足 Σn≤1000.
对于另外30%的数据满足 ai>ai+1.
对于100%的数据满足 Σn≤200000,ai≤107.

很显然每个数要移的话一次就够了
这样的话问题就被转化成了
“删除一些数,使得剩下的数刚好成不下降序列,要删除的数总和尽量小”
即“求最大权值不下降子序列”
前30%的数据O(n2)dp就可以了(f[i]=max{f[j]}+a[i],j<i,a[j]<=a[i])
ai>ai+1的30%数据很显然答案就是a2+a3+...+an
接下来考虑100分做法
其实也不难,就是把dp优化成O(nlog n)的就行了,
把f[i]用权值线段树维护一下,
查a[j]<=a[i]中f[j]的最大值还是很好求的
下面是代码:
#include<bits/stdc++.h>
#define Lowbit(i) (i&(-i))
#define ll long long
using namespace std;
const int N=2e5+1e4;
int n,a[N],b[N],p[N*50]; ll w[N];
ll Max(ll x,ll y){return x>y?x:y;
}
int rd(){int s=0,ff=1;char w=getchar();while(w<'0'||w>'9'){if(w=='-') ff=-1;w=getchar();}while(w>='0'&&w<='9'){s=s*10+(w-'0');w=getchar();}return s*ff;
}
ll Query(int x){ ll maxn=0;for(int i=x;i;i-=Lowbit(i))maxn=Max(maxn,w[i]);return maxn;
}
void Add(int x,ll y){for(int i=x;i<=n;i+=Lowbit(i))w[i]=Max(w[i],y);
}
int main(){
//    freopen("pick.in","r",stdin);
//    freopen("pick.out","w",stdout);int t=rd();while(t--){ n=rd(); int fla=0; ll tot=0;for(int i=1;i<=n;i++)a[i]=rd(),b[i]=a[i],tot+=a[i];sort(b+1,b+1+n); int ct=0;for(int i=1;i<=n;i++){if(i==1||b[i]!=b[i-1]) ct++;p[b[i]]=ct;}ll maxn=-1e17;for(int i=1;i<=n;i++){ll f=Query(p[a[i]]); Add(p[a[i]],f+a[i]);
//            for(int j=1;j<i;j++)
//                if(a[j]<=a[i])
//                    f[i]=Max(f[i],f[j]+a[i]);maxn=Max(maxn,f+a[i]);}for(int i=1;i<=n;i++) p[a[i]]=0,w[i]=0;printf("%lld\n",tot-maxn); continue;}return 0;
}

对了,我订正的时候用的是树状数组,

因为是求前缀的最大值,所以树状数组是可以的,

记住区间求最大值千万不能用树状数组。


T3 一道另类的前缀和(1s 512MB)

3.1 题目描述
已知常数 n,k ,p 和函数

 

你需要计算该函数的前缀和S(n)对p取模的结果

 

3.2 输入格式
从文件prefix.in中读入数据。
数据的第1行包含三个非负整数 n,k ,意义如题目描述。
3.3 输出格式
输出到文件prefix.out中。输出一行一个正整数,S(n)可能为分数,所以输出S(n)对p取模的结
果。
即S(n)=a/b输出a*b-1.
3.4 样例输入
5 2 998244353
3.5 样例输出
465847367
3.6 数据约定
对于100%的数据n≤107,k≤107,k≤n.

 

一道数论题,先推式子:

 

现在求出即可

 

前20%的n≤2000,预处理下,直接这样模拟就行了

再来看k=0,由二项式定理得:

S(n)就可以算出来了

到这里你就可以获得40分的好成绩,当然还不够,

要继续的话,我得先引出一个推论:

 

证明如下:

k=1就可以了

很简单对吧,我们继续

先模拟下k=2的情况

以此类推就可以得出最终答案:

 

就是

发现用到的只有k个,把它和2i滚动地处理出来,但需要求n!

所以时间复杂度为O(n)。

拜拜~

转载于:https://www.cnblogs.com/manmanjiangQwQ/p/11173847.html

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

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

相关文章

安卓开发面试书籍,每个程序员都必须掌握的8种数据结构!面试必会

前言 本篇文章主要记录分享我的面试准备过程。 很多朋友问我为什么离职 关于离职原因&#xff0c;马云有一句经典的话“要么钱没给到位&#xff0c;要么心委屈了”&#xff0c;想必大家耳熟能详了&#xff0c;我这里再细说一下我个人离职原因&#xff1a; 工资倒挂&#xf…

使用thinkPHP做注册程序的实例

登录界面&#xff1a; 数据库和数据表的结构 具体的操作步骤如下&#xff1a; 第一步&#xff1a;入口文件index.php内容 (此文件基本是属于固定的格式&#xff09; <?phpdefine(THINK_PATH,./ThinkPHP/);define(APP_NAME,MyApp);define(APP_PAHT,./MyApp/);require_once T…

安卓开发面试技能介绍,来一份全面的面试宝典练练手,不吃透都对不起自己

前言 网上有很多对程序员简历的一些指导&#xff0c;这里就不重述&#xff0c;大家可以搜下网上其他大神的总结&#xff0c;结合自身情况修改下。我有几点建议&#xff1a; 1.尽量不要花哨&#xff0c;程序员和设计师或者产品运营还不一样&#xff0c;我们的简历成功与否决定…

安卓开发面试题及答案,一次哔哩哔哩面试经历,年薪50W

没有稳定的工作&#xff0c;只有稳定的能力。 又到了万物复苏的季节&#xff0c;在程序猿这个行当里&#xff0c;作为 Android 开发出生的&#xff0c;在经历了八年的脱发生涯后&#xff0c;有了越来越多的想法和感触 趋势 随着各类移动跨平台的兴起&#xff0c;在 ReactNati…

安卓开发面试题!带着问题深入学习Handler,进阶学习资料!

进大厂本来就很难了&#xff0c;不过做足了准备&#xff0c;你会发现很多问题都迎刃而解了&#xff0c;当然有时候运气也占了一部分&#xff0c;除了运气以外&#xff0c;当然与我自身的努力也是分不开的。运气也是实力的一部分&#xff0c;毕竟天助自助者~ 每次到年底做总结的…

VueJS教程3

目录 13、Vue实例 13.1 动态组件&#xff08;Tab切换、简化版留言板&#xff09;13.2 使用Vue开发TodoList14、Vue CLI14.1 使用vue-cli开发TodoList接着VueJS教程2。 13、Vue实例 13.1 动态组件&#xff08;Tab切换、简化版留言板&#xff09; 参考&#xff1a;https://vuejs.…

春招我借这份PDF的复习思路,论程序员成长的正确姿势

一. 开发背景 想要成为一名优秀的Android开发&#xff0c;你需要一份完备的知识体系&#xff0c;在这里&#xff0c;让我们一起成长为自己所想的那样。 面试总结 面试大厂一定要做好充分的准备&#xff0c;没有准备就去面试完全是去当炮灰的&#xff0c;更是对自己的不负责。再…

T-SQL语句学习(三)

这部分介绍下视图、索引技术。 1、视图&#xff1a;是从一个或几个基本表&#xff08;或视图&#xff09;导出表。视图与基本表不同&#xff0c;是一个虚表。 当基本表中的数据发生变化时&#xff0c;从视图中查询出来的数据也会随之改变。 1.1 定义视图 a、创建视图的语法要求…

普通二本的辛酸Android面试之路,满满干货指导

一、自我介绍 应该算是起点比较高吧&#xff01;985大学毕业后面一直在国外读研。之前准备面试微软但是可能经验不够&#xff0c;没有通过。经过朋友介绍我准备回国&#xff0c;积累一些开发经验。于是我面试了国内大厂BATJ&#xff0c;还有一些其他比较知名的公司&#xff0c…

普通二本的辛酸Android面试之路,算法太TM重要了

前言 编程是一个江湖&#xff0c;江湖之大&#xff0c;鱼龙混杂&#xff0c;一部分江湖人士乃虾兵蟹将&#xff0c;一不小心就被一箭射死&#xff0c;我们称之为“码农”&#xff0c;这些人事江湖的重要组成部分&#xff0c;他们承担着堆砌代码&#xff0c;实现功能设计的使命…

SQL常用日期处理函数(转)

/**datepart()函数的使用 * datepart()函数可以方便的取到时期中的各个部分*如日期&#xff1a;2006-07--02 18&#xff1a;15&#xff1a;36.513* yy:取年 2006* mm:取月 7* dd:取月中的天 2* dy:取年中的天 183* wk:取…

最全的BAT大厂面试题整理,系列篇

前言 看到一篇文章中提到“最近几年国内的初级Android程序员已经很多了&#xff0c;但是中高级的Android技术人才仍然稀缺“&#xff0c;这的确不假&#xff0c;从我在百度所进行的一些面试来看&#xff0c;找一个适合的高级Android工程师的确不容易&#xff0c;一般需要进行大…

最全面试考点与面试技巧,大厂面经合集

前言 对于字节跳动的二面三面而言&#xff0c;FrameworkMVP架构HashMap原理性能优化Flutter源码分析等问题都成高频问点&#xff01;然而很多的朋友在面试时却答不上或者答不全&#xff01;今天在这分享下这些问点的视频解析给大家&#xff0c;希望对有需要的朋友有所帮助&…

阿里云sql监控配置-druid

今天我们说说数据源和数据库连接池&#xff0c;熟悉java开发的同仁应该都了解C3PO&#xff0c;在这里不做过多的赘述了&#xff0c;今天我们说的是阿里DRUID&#xff0c;druid是后起之秀&#xff0c;因为它的优秀很快占领了使用市场&#xff0c;下边我们一起来看看druid数据源的…

最全面试考点与面试技巧,真香!

写在前面 身边有不少去大厂面试的朋友&#xff0c;其中小金面试字节跳动的经历很有意义&#xff0c;在这里分享给大家。小金是末流211计算机专业大三本科生&#xff0c;前几天面试了字节跳动的广州Android开发实习生。下面是他的面试经历&#xff0c;还有一些他自己的经验。 …

最强Android教程!2021年Android面经分享,大厂面经合集

前言 找工作还是需要大家不要紧张&#xff0c;有我们干这一行的接触人本来就不多 难免看到面试官会紧张&#xff0c;主要是因为怕面试官问的问题到不上来&#xff0c;那时候不要着急 &#xff0c;答不上了的千万不然胡扯一些&#xff0c;直接就给面试官说这块我还没接触到&…

最强整理!字节跳动历年Android中高级面试题全收录!附超全教程文档

开头 让我们一起来看看&#xff0c;字节跳动的第三面&#xff0c;面试官都问了什么&#xff1f;&#xff08;第一二面的题目及答案已整理&#xff0c;需要的可以在文末领取&#xff09; 从七月中旬开始&#xff0c;我前前后后差不多一共投递了八十份简历&#xff0c;到目前为…

最新BAT大厂面试者整理的Android面试题目模板,分享PDF高清版

前言 从毕业到现在面试也就那么几家公司&#xff0c;单前几次都比较顺利&#xff0c;在面到第三家时都给到了我offer&#xff01;前面两次找工作&#xff0c;没考虑到以后需要什么&#xff0c;自己的对未来的规划是什么&#xff0c;只要有份工作&#xff0c;工资符合自己的要求…

最新BAT大厂面试者整理的Android面试题目模板,成功入职字节跳动

前言 **一年中第一段跳槽高潮就要来了&#xff0c;**看到同事一个个离职&#xff0c;又有一部分同事已经找到满意的工作&#xff0c;于是自己也盲目的开始面试起来&#xff08;期间也没有准备充分&#xff09;&#xff0c;日夜奔走&#xff0c;简历投了很多家公司&#xff0c;…

算法题+JVM+自定义View,终局之战

关于面试题 打个比方&#xff0c;如果把找工作理解成考大学&#xff0c;面试就是高考&#xff0c;市面上的“真题”就是模拟试卷。我们会很容易倾向于在面试前寻找对应公司的面试“真题”&#xff0c;重点准备&#xff0c;期待“押题”成功。但实际上&#xff0c;即使面试同一…