别找了原来没有写过叫《朦胧》的我check过了。(慌的一匹)

总算是比较早的改完了一套题。

但是考的是个啥啊。。。

前两道题都很卡常导致我想到了正解但是都放弃了。

2e8的复杂度怎么可能能过?它还就真的过了(重测后)

但是在考场上你算出2e8的复杂度时我是绝对不会打的。

也不知道为什么这次的数据范围和时限这么毒瘤。

T3想到树dp但是时间不够了(光卡前两题的常数了)然后就挂了

用了一个19分的盖了30分,掉了5个rank。

但是总体来说状态还是不好。。。

T1:Median

不知道什么叫做中位数的请回小学回炉再造我教的那踢足球的都知道什么是中位数

刚开始看到那个奇怪的生成序列还想找什么规律,但是如果是纯粹的素数的确没有规律。

那个序列的生成就是随机数据!

但是线筛178500000实在是可怕,毕竟stdTLE70。(fixed)

在观察数据范围,有一个w<=k,有什么用?

如果是随机数据的话,那么就意味着:均匀分布,基本每个数都出现过。

虽说S2序列是2w级别的,那也大概就是每2个数分布有一个。

不难发现每次序列移动时只是删了一个数加了一个数,那么在随机数据下中位数变化并不大。

开桶。存k个数里每种数出现了几次,然后用指针找中位数,指针的移动范围并不大。

在k为偶数时更麻烦一些,你要把中位数指针再往右动一动来找到后继,其实不难。

注意卡常!

 #include<cstdio>
int S2[],buc[],p[],S[];bool np[];
main(){//freopen("t.in","r",stdin);
register int n,w,k,mp=,mcnt=,rp=,rcnt=,cnt=;scanf("%d%d%d",&n,&k,&w);
for(register int i=;;++i){
if(!np[i]){p[++cnt]=i;if(cnt>=n)break;}
for(register int j=;j<=cnt&&i*p[j]<;++j){
np[i*p[j]]=;
if(i%p[j]==)break;
}
}
for(register int i=;i<=n;++i)S[i]=1ll*i*p[i]%w,S2[i]=S[i/+]+S[i];
for(register int i=;i<=k;++i)buc[S2[i]]++;
mcnt=buc[];
const register int K=k->>,Kr=k>>;
while(mcnt<=K)mcnt+=buc[++mp];
register long long ans=;
for(register int i=;i<=n-k+;++i){
register int rp=mp,rcnt=mcnt;
while(rcnt<=Kr)++rp,rcnt+=buc[rp];
ans+=mp+rp;
--buc[S2[i]];++buc[S2[i+k]];
if(S2[i]<=mp)--mcnt;
if(S2[i+k]<=mp)++mcnt;
while(mcnt<=K)mcnt+=buc[++mp];
while(mcnt-buc[mp]>K)mcnt-=buc[mp--];
}
printf("%lld",ans>>);puts(ans&?".5":".0");
}

思路积累:

  • 2e8也是正解复杂度
  • 指针的灵活运用。对复杂度的保证。

T2:Game

贪心很显然了,问题就是不断的找最大值。

因为k没有出到1e5那种级别,其实就可以表明并不是离线预处理或者带log什么的。

这道题的特殊之处在于如果加入了一个大数那么它马上就会被拿走。

所以开桶加指针,不断从下一个数和指针的数中取最优决策,桶空了就移动指针。

极度卡常。不离散化的话过不去(那么理论上可以造出离散化没有优化效果的数据导致所有离散化的人依然TLE。。。)

没办法评测机老了。

 #include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
map<int,int>M;
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;
}
int a[],buc[],b[],re[];const int r[]={-,};
int main(){
register int n=read(),k=read(),cnt=;
for(int i=;i<=n;++i)a[i]=b[i]=read();
sort(b+,b++n);
for(int i=;i<=n;++i)if(b[i]!=b[i-])M[b[i]]=++cnt,re[cnt]=b[i];
for(int i=;i<=n;++i)b[i]=M[a[i]];
while(k--){
register int p=read(),pnt=;register long long ans=;
for(register int i=;i<p;++i)buc[b[i]]++,pnt=max(b[i],pnt);
for(register int i=p;i<=n;++i)
if(b[i]>=pnt)ans+=re[b[i]]*r[i-p&^];
else {
ans+=re[pnt]*r[i-p&^];
buc[pnt]--;buc[b[i]]++;
while(!buc[pnt])pnt--;
}
for(register int i=n-p+;i<=n;++i){
ans+=re[pnt]*r[i&];buc[pnt]--;
while(!buc[pnt]&&pnt)pnt--;
}
printf("%lld\n",ans);
}
}

思路积累:

  • 2e8也是正解复杂度
  • 指针的灵活运用。对复杂度的保证。

T3:Park/Chase

题很好。

看到题目能看出是树形dp,但是细节稍多。

需要发现的规律:放面包屑的贡献是你的所有邻居点的总初始鸽子数减去你到的上一个点的初始鸽子数。

经过分类讨论可以证明。

然后可以发现同一条路径正着走反着走是不一样的,得分类讨论起点在哪里。

既然是树p那么就考虑是否在字树内了,也就是这条链是向上走的还是向下走的。

维护出这两种链其实并不难,按照上面说的贡献做好了。

然后考虑怎么更新答案。扫到节点p之后枚举儿子t,用到p节点位置的向上链和从t节点开始的向下链合并一下就好了。

为什么不用p下链和t上链呢,因为按照上面的贡献规则如果选了p,那么应该把p的上一个点的鸽子减去。

但是在你做的下链统计过程中你是把父亲节点直接当作来源点的,然而在刚才那种情况下t才是来源点。

所以只考虑p的上链和t的下链。

这又引出了一个问题:你只用了已更新的儿子的上链和未更新的儿子的下链合并,但是儿子的顺序是一定的。

这样的话未更新的儿子的上链和已更新的儿子下链没有合并过导致决策不一定最优。因为上面说过路径反过来不一样。

所以把儿子的顺序倒过来再跑一遍就结束了。

 #include<cstdio>
#include<cstring>
using namespace std;
void Max(long long &x,long long y){if(x<y)x=y;}
long long dp[][],DP[][],ans,cg[];//dp=up DP=down
int w[],fir[],l[],to[],cnt,n,k;
int FIR[],L[],TO[],CNT;
void link(int a,int b){l[++cnt]=fir[a];fir[a]=cnt;to[cnt]=b;cg[a]+=w[b];}
void Link(int a,int b){L[++CNT]=FIR[a];FIR[a]=CNT;TO[CNT]=b;}
void dfs(int p,int fa){
for(int i=;i<=k;++i)dp[p][i]=cg[p],DP[p][i]=cg[p]-w[fa];
for(int e=fir[p];e;e=l[e])if(to[e]!=fa){int t=to[e];
dfs(t,p);
for(int i=;i<=k;++i)Max(ans,dp[p][i]+DP[t][k-i]);
for(int i=;i<=k;++i)Max(dp[p][i],dp[t][i]),Max(dp[p][i+],dp[t][i]+cg[p]-w[t]);
for(int i=;i<=k;++i)Max(DP[p][i],DP[t][i]),Max(DP[p][i+],DP[t][i]+cg[p]-w[fa]);
}
for(int i=;i<=k;++i)Max(ans,dp[p][i]);
}
void DFS(int p,int fa){
for(int i=;i<=k;++i)dp[p][i]=cg[p],DP[p][i]=cg[p]-w[fa];
for(int e=FIR[p];e;e=L[e])if(TO[e]!=fa){int t=TO[e];
DFS(t,p);
for(int i=;i<=k;++i)Max(ans,dp[p][i]+DP[t][k-i]);
for(int i=;i<=k;++i)Max(dp[p][i],dp[t][i]),Max(dp[p][i+],dp[t][i]+cg[p]-w[t]);
for(int i=;i<=k;++i)Max(DP[p][i],DP[t][i]),Max(DP[p][i+],DP[t][i]+cg[p]-w[fa]);
}
for(int i=;i<=k;++i)Max(ans,dp[p][i]);
}
int main(){
scanf("%d%d",&n,&k);
for(int i=;i<=n;++i)scanf("%d",&w[i]);
for(int i=,x,y;i<n;++i)scanf("%d%d",&x,&y),link(x,y),link(y,x);
for(int i=;i<=n;++i)for(int j=fir[i];j;j=l[j])Link(i,to[j]);
dfs(,);DFS(,);printf("%lld\n",ans);
//for(int i=1;i<=4;++i)for(int j=0;j<=k;++j)printf("%d %d:%lld %lld \n",i,j,dp[i][j],DP[i][j]);
}

[考试反思]1007csp-s模拟测试63:朦胧的更多相关文章

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

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

  2. 10.7 csp-s模拟测试63 Median+Game+Park

    我堕落了 我觉得任牛逼的问题也是我的问题 T1 Median T2 Game T3 Park

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

    A.Median 这题的数据生成方式并没有什么规律,所以可以认为是随机数据. 维护一个桶,表示当前K长区间里的值域情况. 并且用变量记录中位数值域上的左侧有多少个数,当区间调整时一并调整桶和这个变量即 ...

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

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

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

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

  6. [考试反思]0909csp-s模拟测试41:反典

    说在前面:我是反面典型!!!不要学我!!! 说在前面:向rank1某脸学习,不管是什么题都在考试反思后面稍微写一下题解. 这次是真的真的运气好... 这次知识点上还可以,但是答题策略出了问题... 幸 ...

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

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

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

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

  9. [考试反思]1003csp-s模拟测试58:沉淀

    稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...

随机推荐

  1. spring-boot-plus XSS跨站脚本攻击处理

    XSS跨站脚本攻击处理 XSS:Cross Site Scripting 跨站脚本攻击(XSS),是目前最普遍的Web应用安全漏洞.这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当 ...

  2. wsgi相关的

    目录 web 本质 http协议 请求方式 响应状态码 请求与响应文本格式 目录 web 本质   本质就是浏览器和服务器进行通信, http协议   也叫超文本传输协议(英文:HyperText T ...

  3. 02-15 Logistic回归(鸢尾花分类)

    目录 Logistic回归(鸢尾花分类) 一.导入模块 二.获取数据 三.构建决策边界 四.训练模型 4.1 C参数与权重系数的关系 五.可视化 更新.更全的<机器学习>的更新网站,更有p ...

  4. Chirpy Zippy工具使用心得

    今天在网上看到MVC开发人员必备的工具中有一个工具叫Chirpy Zippy,可以把项目中的js文件自动压缩成min.js文件,于是就试了下这款工具.上到官网:http://chirpy.codepl ...

  5. hihoCode 1075 : 开锁魔法III

    时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅 ...

  6. aiohttp的安装

    之前介绍的requests库是一个阻塞式HTTP请求库,当我们发出一个请求后,程序会一直等待服务器响应,知道得到响应后,程序才会进行下一步处理.其实,这个过程比较耗时.如果程序可以在这个等待过程中做一 ...

  7. 引入jar包到本地仓库方法

    1. 将jar放到本地某个位置,然后cmd到目标位置:2. 执行mvn install:install-file -DgroupId=com.alipay -DartifactId=alipay-tr ...

  8. 代码审计-(Ear Music).任意文件下载漏洞

    0x01 代码分析 后台地址:192.168.5.176/admin.php admin admin 安装后的界面 在后台发布了一首新歌后,前台点进去到一个“下载LRC歌词”功能点的时候发现是使用re ...

  9. 代码审计-DedeCMS-V5.7前台任意用户密码重置

    0x01 漏洞影响 该漏洞允许攻击者修改任意前台用户密码. 0x02 漏洞利用条件 1,开启会员模块 2,攻击者拥有一个正常的会员账号 3,目标没有设置安全问题 0x03 漏洞分析 漏洞文件:/mem ...

  10. LInux下npm install 安装失败问题

    现象: 今天公司自己动部署的Jenkins出现了问题,在执行npm install的时候,失败了,下载不到npm,在查阅了各种报错信息之后还是没有解决,发现用淘宝镜像进行安装时,也会有安装不成功的情况 ...