下面是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
9 5 7 2 8
5
7 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*]; ll w[N];
ll Max(ll x,ll y){
return x>y?x:y;
}
int rd(){
int s=,ff=;
char w=getchar();
while(w<''||w>''){
if(w=='-') ff=-;
w=getchar();
}
while(w>=''&&w<=''){
s=s*+(w-'');
w=getchar();
}
return s*ff;
}
ll Query(int x){ ll maxn=;
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=; ll tot=;
for(int i=;i<=n;i++)
a[i]=rd(),b[i]=a[i],tot+=a[i];
sort(b+,b++n); int ct=;
for(int i=;i<=n;i++){
if(i==||b[i]!=b[i-]) ct++;
p[b[i]]=ct;
}
ll maxn=-1e17;
for(int i=;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=;i<=n;i++) p[a[i]]=,w[i]=;
printf("%lld\n",tot-maxn); continue;
}
return ;
}

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

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

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


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)。

拜拜~

杭州集训Day5的更多相关文章

  1. Loj #6073.「2017 山东一轮集训 Day5」距离

    Loj #6073.「2017 山东一轮集训 Day5」距离 Description 给定一棵 \(n\) 个点的边带权的树,以及一个排列$ p\(,有\)q $个询问,给定点 \(u, v, k\) ...

  2. 「2017 山东一轮集训 Day5」苹果树

    「2017 山东一轮集训 Day5」苹果树 \(n\leq 40\) 折半搜索+矩阵树定理. 没有想到折半搜索. 首先我们先枚举\(k\)个好点,我们让它们一定没有用的.要满足这个条件就要使它只能和坏 ...

  3. 2019暑期金华集训 Day5 树上数据结构

    自闭集训 Day5 树上数据结构 前置知识 点分治 边分治 树链剖分 LCT Top Tree LCT时间复杂度 线段树每次查询是严格\(\log n\)的,然而splay维护连续段的时候,如果每次查 ...

  4. 2019暑期金华集训 Day5 生成函数

    自闭集训 Day5 生成函数 一般生成函数 无脑地把序列变成多项式: \[ \{a_i\}\rightarrow A(x)=\sum_{n} a_nx^n \] 形式幂级数 生成函数是一种形式幂级数. ...

  5. 「疫期集训day5」火焰

    我们就像一把穿刺敌人的利刃,把敌人开肠破肚----凡尔登高地前气势汹汹的德军 今天没有考试,挺好,有时间自己做题了 今天主要复习+学习了数据结构,列了个表: 已完成:单调队列,线段树,set/vect ...

  6. 2022寒假集训day5

    day5 五道栈的题加上字符串. 单调队列. T1 表达式括号匹配   洛谷P1739 题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@&q ...

  7. [日常训练]常州集训day5

    T1 Description 小$W$和小$M$一起玩拼图游戏啦~ 小$M$给小$M$一张$N$个点的图,有$M$条可选无向边,每条边有一个甜蜜值,小$W$要选$K$条边,使得任意两点间最多有一条路径 ...

  8. 2015湖南省选集训DAY5——work(BZOJ4177)

    Description Mike有一个农场,这个农场n个牲畜围栏,如今他想在每一个牲畜围栏中养一仅仅动物,每仅仅动物能够是牛或羊,并且每一个牲畜围栏中的饲养条件都不同,当中第i个牲畜围栏中的动物长大后 ...

  9. FJ省队集训DAY5 T1

    思路:考试的时候打了LCT,自以为能过,没想到只能过80.. 考完一想:lct的做法点数是100W,就算是nlogn也会T. 讲一下lct的做法把:首先如果一条边连接的两个点都在同一个联通块内,那么这 ...

随机推荐

  1. cssfloat布局以及其他小技巧

    css float 布局以及其他小技巧总结 这篇博文 前面四个部分是关于css 经典布局 如果你已经知道了 可以直接跳过看第六部分 css 的其他小技巧 1.0 左右居中布局 <!DOCTYPE ...

  2. DevExpress v19.1新版亮点——WinForms篇(五)

    行业领先的.NET界面控件DevExpress v19.1终于正式发布,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WinForms v19.1中新增的一些控 ...

  3. thinkPHP模型定义

    批量新增 ArrayAccess类的属性当做数组访问 插入语句 这段代码说明,User继承的Model类的isupdate属性默认是isupdate,而User::get(1)把这一字段属性更新为tr ...

  4. python之路day13--迭代器

    迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的ge ...

  5. 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Matrix

    题目 分析 假设,我们从\(F_{i,2}\)出发,那么对\(F_{n,n}\)的贡献就是\(某个系数乘以a^{n-i}b^{n-1}r_i\): 同理,如果从\(F_{2,i}\)出发,那么对\(F ...

  6. 算法复习-a 到 z不完全排列生成

    在网上看到这个题,觉得很有意思,也算是一种方法...但是复杂度同样很高,生成全排列本身需要很大复杂度. 题目:现在有 a 到 z 26 个元素, 编写程序打印 a 到 z 中任取 3 个元素的组合(比 ...

  7. 【leetcode】1208. Get Equal Substrings Within Budget

    题目如下: You are given two strings s and t of the same length. You want to change s to t. Changing the  ...

  8. 虚拟机安装 Output error file to the following location

    有的用户会对你中安装虚拟机系统,但偶尔会在安装过程中遇到一些问题.比如在电脑安装虚拟机系统时出现提示“Output error file to the following location”,这一般是 ...

  9. HDU 6191 Query on A Tree(字典树+离线)

    Query on A Tree Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Othe ...

  10. C#获取网页信息并存入数据库

    1,获取以及商品分类信息 给一网页获取网页上商品信息的分类 using Skay.WebBot; using System; using System.Collections.Generic; usi ...