最近总是好一场烂一场的。没有连续两场排名波动小于20的。。。

没人管。反正大脸一点脸没有就又AK了。

但是T3爆零这种事情吧。。。

爆搜不是很难打,但是想优化想了半天剩的时间不够结果赶忙打出来了,然后就挂了。

合理安排时间,要把码暴力的时间也考虑到,要检查。

T1T2仍然挂上了对拍,所以没有全盘爆炸。

总体来说是相对简单的一套题。

T1:嘟嘟噜

我的思路不太一样。但是复杂度是相似的。

$O(m+log_{\frac{m}{m-1}}\frac{n}{m})$

因为题面里说开无限栈了,然后我就想到了递归打法。

int winner(int n)函数处理剩下n个人时最终胜者的目前编号。

那么如果剩余人数n>m,那么你就可以把n/m个人同时干掉,从第n/m*m+1个人开始数来计算胜者

如果n<=m的话,那就干掉一个人然后继续递归,和约瑟夫一样。

这样的话每次递归,人数会在$-1$和$\times \frac{m-1}{m}$里选一个来 让它快速减小,可以得到上面的复杂度。

据$o0O$打表证明,使n为1e9,当m取到大约1e6时函数的增长速度达到峰值,再之后的增长速度大约为线性。

而本题数据范围1e5时的函数值仅仅是1e5多一点。

总之O(可过)。

 #include<cstdio>
int m,n,t;
int winner(int n){
if(n==)return n;
if(n<m)return (winner(n-)+m-)%n+;
int N=n/m,w=winner(n-N);
if(N*m+w<=n)return N*m+w;
w-=n-N*m;return (w-)/(m-)*m+(w-)%(m-)+;
}
main(){
scanf("%d",&t);
while(t--)scanf("%d%d",&n,&m),printf("%d\n",winner(n));
}

T2:天才绅士少女助手克里斯蒂娜

这道题是放假前让zkq出数据的那道题(这数据不是现成的嘛,还白给他送了个AC)

化式子,拆平方,最后发现要求的就是$\sum\limits_{i=l}^r \sum\limits_{j=l}^r x_i^2 y_j^2 - x_i y_i x_j y_j$

乘法分配律,得到的就是区间$(\sum\limits_{i=l}^{r}x_i^2)\times(\sum\limits_{i=l}^{r}y_i^2) - (\sum\limits_{i=l}^{r}x_iy_i)^2$

线段树或树状数组维护区间$x^2,y^2,xy$的和即可。注意常数。

 #include<cstdio>
#define mod 20170927
int cl[],cr[],x2[],y2[],xy[],x[],y[],XY,X2,Y2;
int read(){
register int p=;register char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')p=(p<<)+(p<<)+ch-,ch=getchar();
return p;
}
#define lc p<<1
#define rc p<<1|1
int Mod(int p){return p>=mod?p-mod:p;}
void up(int p){x2[p]=Mod(x2[lc]+x2[rc]);y2[p]=Mod(y2[lc]+y2[rc]);xy[p]=Mod(xy[lc]+xy[rc]);}
void build(int p,int l,int r){
cl[p]=l;cr[p]=r;
if(l==r){long long x=read(),y=read();x2[p]=x*x%mod;y2[p]=y*y%mod;xy[p]=x*y%mod;return;}
build(lc,l,l+r>>);build(rc,(l+r>>)+,r);up(p);
}
void chg(int p,int pos){
if(cl[p]==cr[p]){long long x=read(),y=read();x2[p]=x*x%mod;y2[p]=y*y%mod;xy[p]=x*y%mod;return;}
chg(cr[lc]>=pos?lc:rc,pos);up(p);
}
void ask(int p,int l,int r){
if(l<=cl[p]&&cr[p]<=r){XY=Mod(XY+xy[p]);X2=Mod(X2+x2[p]);Y2=Mod(Y2+y2[p]);return;}
if(l<=cr[lc])ask(lc,l,r);if(r>=cl[rc])ask(rc,l,r);
}
main(){
int n=read(),m=read(),opt,p;
build(,,n);
while(m--){opt=read();p=read();
if(opt==)chg(,p);
else XY=X2=Y2=,ask(,p,read()),printf("%d\n",Mod((1ll*X2*Y2-1ll*XY*XY)%mod+mod));
}
}

T3:凤凰院凶真

没想到。《算法竞赛进阶指南》上的原题竟然也不会做了。

想的是三维,表示a串到了i位,b串到了j位,匹配的最大值是k的最大值。

然而最后一维可以压掉,可以发现最后一维与前两维有关。

我们只要强制b串的第j位必选就行了,这样就能得知最后一个选的是几,即最大值是几。

简单的n3枚举。

 #include<cstdio>
int n,m,x[],y[],fr[][],sta[],top;
short dp[][];
void upd(int i,int j,int li,int lj,int w){
if(dp[i][j]>dp[li][lj]+)return;
dp[i][j]=dp[li][lj]+w;
fr[i][j]=lj;
}
void get_back(int i,int j){if(i==||j==)return;
int lj=fr[i][j];
if(j!=lj)sta[++top]=y[j];
get_back(i-,lj);
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%d",&x[i]);
scanf("%d",&m);
for(int i=;i<=m;++i)scanf("%d",&y[i]);
for(int i=;i<=n;++i)for(int j=;j<=m;++j)
if(x[i]==y[j]){for(int k=;k<j;++k)if(y[k]<x[i])upd(i,j,i-,k,);}
else upd(i,j,i-,j,);
int M=;for(int i=;i<=m;++i)if(dp[n][i]>dp[n][M])M=i;
printf("%d\n",dp[n][M]);
get_back(n,M);
for(int i=top;i;--i)printf("%d ",sta[i]);puts("");
}

优化,边扫边记录上一层的最优决策。n2

 #include<cstdio>
int n,m,x[],y[],fr[][],sta[],top;
short dp[][];
void upd(int i,int j,int li,int lj,int w){
if(dp[i][j]>dp[li][lj]+)return;
dp[i][j]=dp[li][lj]+w;
fr[i][j]=lj;
}
void get_back(int i,int j){if(i==||j==)return;
int lj=fr[i][j];
if(j!=lj)sta[++top]=y[j];
get_back(i-,lj);
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%d",&x[i]);
scanf("%d",&m);
for(int i=;i<=m;++i)scanf("%d",&y[i]);
for(int i=;i<=n;++i){
int bst=,bp=;
for(int j=;j<=m;++j){
if(x[i]==y[j])upd(i,j,i-,bp,);
else upd(i,j,i-,j,);
if(y[j]<x[i]&&dp[i-][j]>bst)bst=dp[i-][j],bp=j;
}
}
int M=;for(int i=;i<=m;++i)if(dp[n][i]>dp[n][M])M=i;
printf("%d\n",dp[n][M]);
get_back(n,M);
for(int i=top;i;--i)printf("%d ",sta[i]);puts("");
}

回溯统计答案没什么好说的。

思路积累:

  • 当dp维数过多导致复杂度高时,要考虑每维之间是否有联系,能否用一维表示另外一维。

[考试反思]1005csp-s模拟测试60:招魂的更多相关文章

  1. [考试反思]0718 NOIP模拟测试5

    最后一个是我...rank#11 rank#1和rank#2被外校大佬包揽了. 啊...考的太烂说话底气不足... 我考场上在干些什么啊!!! 20分钟“切”掉T2,又27分钟“切”掉T1 切什么切, ...

  2. csp-s模拟测试60

    csp-s模拟测试60       2019-10-05 RT. 又颓又垃圾. 状态低迷,题都交不上去. 交了也是爆零,垃圾玩家没有什么可说的,就是垃圾. A. 嘟嘟噜 $mlogn$的毒瘤做法. 贴 ...

  3. [CSP-S模拟测试60]题解

    回去要补一下命运石之门了…… A.嘟嘟噜 给定报数次数的约瑟夫,递推式为$ans=(ans+m)\% i$. 考虑优化,中间很多次$+m$后是不用取模的,这种情况就可以把加法变乘法了.问题在于如何找到 ...

  4. csps-s模拟测试60嘟嘟噜,天才绅士少女助手克里斯蒂娜,凤凰院凶真题解

    题面:https://www.cnblogs.com/Juve/articles/11625190.html 嘟嘟噜: 约瑟夫问题 第一种递归的容易re,但复杂度较有保证 第二种适用与n大于m的情况 ...

  5. [考试反思]0814NOIP模拟测试21

    前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...

  6. [考试反思]0729NOIP模拟测试10

    安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...

  7. [考试反思]0719NOIP模拟测试6 + 0722NOIP模拟测试7

    连续爆炸,颇为愉快. 第6次:Rank #4 第7次:Rank #9 对于第6次考试,个人比较满意,因为T1只是差了一个卡常. 因为在考试前两天刚讲了矩阵,满脑子都是矩阵,还想到了循环矩阵优化. 整个 ...

  8. [考试反思]0714/0716,NOIP模拟测试3/4

    这几天时间比较紧啊(其实只是我效率有点低我在考虑要不要坐到后面去吹空调) 但是不管怎么说,考试反思还是要写的吧. 第三次考试反思没写总感觉缺了点什么,但是题都刷不完... 一进图论看他们刷题好快啊为什 ...

  9. [考试反思]1109csp-s模拟测试106:撞词

    (撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...

随机推荐

  1. MYSQL SQL语句 之 select

    select语句在数据库操作中是操作频率最高的语句,使用方式也是多种多样,它的基本功能是:从表中选取数据,结果存储在一个结果集中.可以联合where,and,or,Order By,distinct, ...

  2. python编程基础之十二

    列表:一种有序的集合,可以同时存储多个数据,列表元素可修改,属于可变序列 创建列表: 列表名 = [列表选项一,列表选项二,列表选项三,......] list1 = [] list2 = [10,2 ...

  3. 【TencentOS tiny】深度源码分析(3)——队列

    队列基本概念 队列是一种常用于任务间通信的数据结构,队列可以在任务与任务间.中断和任务间传递消息,实现了任务接收来自其他任务或中断的不固定长度的消息,任务能够从队列里面读取消息,当队列中的消息是空时, ...

  4. InfluxDB从原理到实战 - InfluxDB常用的基础操作

    0x00 基础操作介绍 在本文中将介绍InfluxDB常用的基础操作,帮助读者建立对InfluxDB的感性认识,快速的动手玩起来,持续查询(Continuous Queies).Group by.Se ...

  5. Jenkins设置BUILD NUMBER初始值

    由于服务器迁移,需要将之前的Jenkins构建项目一并迁移,为了区分构建编号,需要将所有项目的BUILDE NUMBER 初始值定义. 网上有一些资料是更新单个项目的,我们这项目几百个,所以只好自己研 ...

  6. AWD攻防工具脚本汇总(二)

    情景五:批量修改ssh密码 拿到官方靶机第一件事改自己机器的ssh密码,当然也可以改别人的密码~ import paramiko import sys ssh_clients = [] timeout ...

  7. 《Java并发编程实战》读书笔记-第3章 对象的共享

    可见性 在没有同步的情况下,编译器.处理器以及运行时都可能做指令重排.执行结果可能会出现错误 volatile变量 编译器与运行时不会进行指令重排,不会进行缓存,使用volatile变量要满足以下条件 ...

  8. 坚果云Markdown - 文档管理编辑器

    坚果云Markdown - 文档管理编辑器 Markdown是什么? Markdown是一种上手简单.应用十分广泛的轻量级标记语法.您可以使用Markdown轻松记录您的灵感.想法.创意.整个记录过程 ...

  9. 3M隔音耳罩拆分、清洗教程

    简介 3M隔音耳罩用起来真爽,十分适合喜欢安静的人.再者,被动和别人同住(学校.厂里宿舍.公司宿舍).公共场合时使用,效果刚刚的.题外话:有些人的素质……%¥%(*¥*! 3M隔音耳罩平时戴着也没觉得 ...

  10. LeetCode108——Convert Sorted Array to Binary Search Tree

    题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...