[考试反思]1005csp-s模拟测试60:招魂
最近总是好一场烂一场的。没有连续两场排名波动小于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:招魂的更多相关文章
- [考试反思]0718 NOIP模拟测试5
最后一个是我...rank#11 rank#1和rank#2被外校大佬包揽了. 啊...考的太烂说话底气不足... 我考场上在干些什么啊!!! 20分钟“切”掉T2,又27分钟“切”掉T1 切什么切, ...
- csp-s模拟测试60
csp-s模拟测试60 2019-10-05 RT. 又颓又垃圾. 状态低迷,题都交不上去. 交了也是爆零,垃圾玩家没有什么可说的,就是垃圾. A. 嘟嘟噜 $mlogn$的毒瘤做法. 贴 ...
- [CSP-S模拟测试60]题解
回去要补一下命运石之门了…… A.嘟嘟噜 给定报数次数的约瑟夫,递推式为$ans=(ans+m)\% i$. 考虑优化,中间很多次$+m$后是不用取模的,这种情况就可以把加法变乘法了.问题在于如何找到 ...
- csps-s模拟测试60嘟嘟噜,天才绅士少女助手克里斯蒂娜,凤凰院凶真题解
题面:https://www.cnblogs.com/Juve/articles/11625190.html 嘟嘟噜: 约瑟夫问题 第一种递归的容易re,但复杂度较有保证 第二种适用与n大于m的情况 ...
- [考试反思]0814NOIP模拟测试21
前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...
- [考试反思]0729NOIP模拟测试10
安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...
- [考试反思]0719NOIP模拟测试6 + 0722NOIP模拟测试7
连续爆炸,颇为愉快. 第6次:Rank #4 第7次:Rank #9 对于第6次考试,个人比较满意,因为T1只是差了一个卡常. 因为在考试前两天刚讲了矩阵,满脑子都是矩阵,还想到了循环矩阵优化. 整个 ...
- [考试反思]0714/0716,NOIP模拟测试3/4
这几天时间比较紧啊(其实只是我效率有点低我在考虑要不要坐到后面去吹空调) 但是不管怎么说,考试反思还是要写的吧. 第三次考试反思没写总感觉缺了点什么,但是题都刷不完... 一进图论看他们刷题好快啊为什 ...
- [考试反思]1109csp-s模拟测试106:撞词
(撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...
随机推荐
- Java 学习笔记之 Sleep停止线程
Sleep停止线程: 在Sleep状态下被interrupt,interrupted 状态会被擦除,返回false. 线程在Sleep状态下被interrupt: public class Sleep ...
- Flume 学习笔记之 Flume NG+Kafka整合
Flume NG集群+Kafka集群整合: 修改Flume配置文件(flume-kafka-server.conf),让Sink连上Kafka hadoop1: #set Agent name a1. ...
- Golang的反射reflect深入理解和示例
编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examin ...
- 前端深入之css篇丨2020年前,彻底掌握css动画【transition】
写在前面 马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所 ...
- 网络游戏开发-客户端2(自定义websocket协议格式)
Egret官方提供了一个Websocket的库,可以让我们方便的和服务器长连接交互. 标题写的时候自定义websocket的协议格式.解释一下,不是说我们去动websocket本身的东西,我们是在we ...
- CentOS 7 的 systemctl 命令
Centos 7.* 使用 Systemd 进行系统初始化,因此,Centos 7.* 中我们可以使用 systemctl 管理系统中的服务. systemctl 管理的服务均包含了一个以 .serv ...
- Kotlin 中的伴生对象和静态成员
用了一段时间kotlin,越用越觉得好用,爱不释手啊,留点笔记. Kotlin 中,在类中定义的对象(object)声明,可使用 companion 修饰,这样此对象(object)就是伴生对象了.类 ...
- django2.0+连接mysql数据库迁移时候报错
django2.0+连接mysql数据库迁移时候报错 情况一 错误信息 django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 ...
- Mysql综述(1)数据是如何读存的
引言 我们都知道,mysql中的索引,事务,锁等都是作为开发人员要重点掌握的知识面,但要想掌握理解好这些知识却并非易事. 其中原因之一就是这些概念都过于抽象,事实上如果都不懂mysql数据是以一种怎样 ...
- Java编程思想——第17章 容器深入研究 读书笔记(四)
九.散列与散列码 HashMap使用equals()判断当前的键是否与表中存在的键相同. 正确的equals()方法需满足一下条件: 1)自反性.x.equals(x) 是true; 2)对称性.x. ...