读题总是读错是不是没救了。。。

T1 Median

中位数:按顺序排列的一组数据中居于中间位置的数。

能用上的高亮符号都用上了。。。

当时忘了就离谱。。。。

理解什么是中位数(真是个憨憨)后就可以开始理解题目了

线性筛素肯定用上

然后按照$k$的奇偶性进行分类求解

用一个东西,叫经典指针,我们都这么叫它

用它标记每段序列的中间数,因为扫一边相当与一个移动窗口滑动,每次序列里改变的元素只有头和尾

所以就移动指针就行了,因为$S_2$序列明显是在教你如何随机数,他的单调性在一定区间内是有保证的

所以指针位移不会太大

奇数用单指针,偶数用双指针

关于巨大的常数:

这题调了好久,最后什么方法都用了。

偶然将%换成同等意义的-*/,他就对了

发现%真是个好东西,反正我的代码筛素数的时候不能用%,把%换成-,*,/的组合可以降低复杂度至少

$17second$ 就离谱。。。。。。

 1 #include<bits/stdc++.h>
2 #define LL long long
3 #define rin register int
4 using namespace std;
5 inline int read(){
6 int x=0,f=1; char ch=getchar();
7 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
8 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
9 return x*f;
10 }
11 const int NN=1e7+2;
12 int n,k,w,prime[NN],cnt;
13 bool vis[200000000];
14 int s[NN],g[NN],bin[NN],use[NN];
15 inline void getprime(){
16 for(rin i=2;cnt<n;i++){
17 if(!vis[i]) prime[++cnt]=i;
18 for(rin j=1;j<=cnt&&i*prime[j]<=200000000;j++){
19 vis[i*prime[j]]=1;
20 if(i/prime[j]*prime[j]==i) break;
21 }
22 }
23 }
24 inline void work1(){
25 LL ans=0;
26 sort(use+1,use+k+1);
27 int it=use[k/2+1],l=0;
28 for(rin i=1;i<=k;++i) ++bin[g[i]];
29 for(rin i=1;i<it;++i) l+=bin[i];
30 ans+=it;
31 for(rin i=2;i<=n-k+1;++i){
32 --bin[g[i-1]]; ++bin[g[i+k-1]];
33 if(g[i-1]<it) --l;
34 if(g[i+k-1]<it) ++l;
35 if(l+bin[it]<=k/2){
36 l+=bin[it]; ++it;
37 while(!bin[it]) ++it;
38 }
39 if(l>=1+k/2){
40 --it;
41 while(!bin[it]) --it;
42 l-=bin[it];
43 }
44 ans+=it;
45 } printf("%.1lf\n",ans*1.0);
46 }
47 inline void work2(){
48 LL ans=0;
49 sort(use+1,use+k+1);
50 int it1=use[k>>1],it2=use[(k>>1)+1],l1=0,l2=0;
51 for(rin i=1;i<=k;++i) ++bin[g[i]];
52 for(rin i=1;i<it1;++i) l1+=bin[i];
53 it1==it2 ? l2=l1 : l2=l1+bin[it1];
54 ans+=it1+it2;
55 for(rin i=2;i<=n-k+1;++i){
56 --bin[g[i-1]]; ++bin[g[i+k-1]];
57 if(g[i-1]<it1) --l1;
58 if(g[i+k-1]<it1) ++l1;
59 if(g[i-1]<it2) --l2;
60 if(g[i+k-1]<it2) ++l2;
61 if(l1+bin[it1]<k/2){
62 l1+=bin[it1]; ++it1;
63 while(!bin[it1]) ++it1;
64 }
65 if(l1>=k/2){
66 --it1;
67 while(!bin[it1]) --it1;
68 l1-=bin[it1];
69 }
70 if(l2+bin[it2]<k/2+1){
71 l2+=bin[it2]; ++it2;
72 while(!bin[it2]) ++it2;
73 }
74 if(l2>=k/2+1){
75 --it2;
76 while(!bin[it2]) --it2;
77 l2-=bin[it2];
78 }
79 ans+=it1+it2;
80 } printf("%.1lf\n",ans/2.0);
81 }
82 namespace WSN{
83 inline int main(){
84 n=read(); k=read(); w=read();
85 getprime();
86 for(rin i=1;i<=n;++i) s[i]=1ll*prime[i]*i%w;
87 for(rin i=1;i<=n;++i) g[i]=s[i]+s[i/10+1];
88 for(rin i=1;i<=k;++i) use[i]=g[i];
89 if(k&1) work1();
90 if(!(k&1)) work2();
91 return 0;
92 }
93 }
94 signed main(){return WSN::main();}

T2 Game

还是经典指针,用桶记录出现次数,扫一边就可以了

不用取$abs$,不过我也不知道为什么,就当题目里面没说吧。。。

 1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 inline int max(int a,int b){return a>b?a:b;}
5 inline int read(){
6 int x=0,f=1; char ch=getchar();
7 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
8 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
9 return x*f;
10 }
11 const int NN=100005;
12 int n,K,a[NN],cnt[NN],ans1,ans2,it,rond;
13 namespace WSN{
14 inline int main(){
15 n=read();K=read();
16 for(int i=1;i<=n;i++) a[i]=read();
17 while(K--){
18 int p=read();
19 it=ans1=ans2=0,rond=1;
20 for(int i=1;i<=p;i++)
21 cnt[a[i]]++, it=max(it,a[i]);
22 cnt[it]--; ans1+=it; rond++;
23 for(int i=1;i<=n-p;i++){
24 while((!cnt[it])&&it) it--;
25 if(it<=a[i+p]){
26 rond&1 ? ans1+=a[i+p] : ans2+=a[i+p];
27 rond++; continue;
28 }
29 cnt[a[i+p]]++; cnt[it]--;
30 rond&1 ? ans1+=it : ans2+=it;
31 rond++;
32 }
33 while((!cnt[it])&&it) it--;
34 while(cnt[it]){
35 cnt[it]--;
36 rond&1 ? ans1+=it : ans2+=it;
37 while((!cnt[it])&&it) it--;
38 rond++;
39 }
40 printf("%lld\n",ans1-ans2);
41 }
42 return 0;
43 }
44 }
45 signed main(){return WSN::main();}

T3 Park

树形$dp$好题,状态转移记录一个$up$一个$down$

鸣谢HEOI动动,写dp太麻烦了。。。

然后因为正序枚举情况不全

再$reverse$ 倒序枚举一遍即可

 1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 inline int read(){
5 int x=0,f=1; char ch=getchar();
6 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
7 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
8 return x*f;
9 }
10 const int NN=1e6+2;
11 int n,v,p[NN],sum[NN];
12 int up[NN][101],dw[NN][101],ans;
13 vector<int> g[NN];
14 inline void dfs(int f,int x){
15 sum[x]+=p[f];
16 for(int i=0;i<g[x].size();i++){
17 int y=g[x][i];if(y==f) continue;
18 dfs(x,y); sum[x]+=p[y];
19 }
20 }
21 inline void dp(int f,int x){
22 for(int i=1;i<=v;i++){
23 up[x][i]=sum[x];
24 dw[x][i]=sum[x]-p[f];
25 }
26 for(int i=0;i<g[x].size();i++){
27 int y=g[x][i];
28 if(y==f) continue;
29 dp(x,y);
30 for(int j=1;j<v;j++)
31 ans=max(ans,up[x][j]+dw[y][v-j]);
32 for(int j=1;j<=v;j++){
33 up[x][j]=max(up[x][j],max(up[y][j],up[y][j-1]+sum[x]-p[y]));
34 dw[x][j]=max(dw[x][j],max(dw[y][j],dw[y][j-1]+sum[x]-p[f]));
35 }
36 }
37 reverse(g[x].begin(),g[x].end());
38 for(int i=1;i<=v;i++){
39 up[x][i]=sum[x];
40 dw[x][i]=sum[x]-p[f];
41 }
42 for(int i=0;i<g[x].size();i++){
43 int y=g[x][i];
44 if(y==f) continue;
45 for(int j=1;j<v;j++)
46 ans=max(ans,up[x][j]+dw[y][v-j]);
47 for(int j=1;j<=v;j++){
48 up[x][j]=max(up[x][j],max(up[y][j],up[y][j-1]+sum[x]-p[y]));
49 dw[x][j]=max(dw[x][j],max(dw[y][j],dw[y][j-1]+sum[x]-p[f]));
50 }
51 }
52 ans=max(ans,max(up[x][v],dw[x][v]));
53 }
54 namespace WSN{
55 inline int main(){
56 n=read(); v=read(); if(!v) {puts("0");return 0;}
57 for(int i=1;i<=n;i++) p[i]=read();
58 for(int i=1;i<n;i++){
59 int x=read(),y=read();
60 g[x].push_back(y);
61 g[y].push_back(x);
62 }dfs(0,1); dp(0,1);
63 printf("%lld\n",ans);
64 return 0;
65 }
66 }
67 signed main(){return WSN::main();}

Noip模拟21(持续翻车)2021.7.20的更多相关文章

  1. NOIP模拟21+22

    模拟21确实毒瘤...考场上硬刚T3 2.5h,成功爆零 T1.数论 看这题目就让人不想做,考场上我比较明智的打完暴力就弃掉了,没有打很久的表然后找规律. 正解貌似是乱搞,我们考虑一个比较显然的结论: ...

  2. Noip模拟33垫底反思 2021.8.8

    T1 Hunter 考场上没写$%p$挂了25分.也是很牛皮,以后打完过了样例一定要检查 因为样例太小了......很容易忘记%%%% 正解随便手模就出来了. 1 #include<bits/s ...

  3. NOIP 模拟 $21\; \rm Park$

    题解 \(by\;zj\varphi\) 首先,分析一下这个答案:本质上是求在一条路径上,选择了一些点,这些点的贡献是它周围的点权和 - 它上一步的点权 对于一棵树,可以先确定一个根,然后每条路径就可 ...

  4. [考试总结]noip模拟21

    中位数要排序!!!!!! 中位数要排序!!!!!! 中位数要排序!!!!!! 中位数要排序!!!!!! 中位数要排序!!!!!! 分差不加绝对值!!!! 分差不加绝对值!!!! 分差不加绝对值!!!! ...

  5. NOIP 模拟 $21\; \rm Median$

    题解 \(by\;zj\varphi\) 对于这个序列,可以近似得把它看成随机的,而对于随机数列,每个数的分布都是均匀的,所以中位数的变化可以看作是常数 那么可以维护一个指向中位数的指针,同时维护有多 ...

  6. NOIP 模拟 $21\; \rm Game$

    题解 考试的时候遇到了这个题,没多想,直接打了优先队列,但没想到分差竟然不是绝对值,自闭了. 正解: 值域很小,所以我们开个桶,维护当前最大值. 如果新加入的值大于最大值,那么它肯定直接被下一个人选走 ...

  7. NOIP模拟 21

    可爱的Dybala走了..(当然只是暂时) 又考了大众分.从rank5到rank17一个分. T1 折纸 秒切,爽啊 天皇偷看我代码,结束看见我A了还很惊讶,说我代码有锅 好沙雕哦 就跟个2b似的. ...

  8. noip模拟21

    开题发现这场考过,定睛一看,发现是省选前最后一场,没改过呀--但是还是讲武德的赛时没提交 A. Median 神奇之处在于 \(1e7\) 个质数居然能线性筛出来~ 那么 \(S2\) 可以直接筛出来 ...

  9. NOIP模拟21:「Median·Game·Park」

    T1:Median   线性筛+桶+随机化(??什么鬼?).   首先,题解一句话秀到了我: 考虑输入如此诡异,其实可以看作随机数据   随机数据??   这就意味着分布均匀..   又考虑到w< ...

随机推荐

  1. vivo营销自动化技术解密|开篇

    一.营销自动化概览 1.1. 什么是营销自动化 营销自动化是指专门为营销部门或组织设计的软件平台和技术,可以更有效地在线进行多渠道营销并使重复性任务自动化.营销部门和销售人员通过制定任务和流程的操作标 ...

  2. Activiti 学习(三)—— Activiti 流程启动并完成

    Activiti 流程启动 流程定义部署后,就可以通过工作流管理业务流程了,也就是说前文部署的出差申请流程可以使用了.针对该流程,启动一个流程表示发起一个新的出差申请单,这就相当于 java 类与 j ...

  3. 计算机网络-HTTP篇

    目录 计算机网络-HTTP篇 HTTP的一些问题 HTTP 基本概念 常见状态码 常见字段 Get 与 Post HTTP 特性 HTTP(1.1) HTTP/1.1 HTTPS 与 HTTP HTT ...

  4. 样式和模板快速入门Style,Template

    http://www.cnblogs.com/jv9/archive/2010/04/14/1711520.html 样式(Style)和模板(Template)的定义 在Silverlight中,样 ...

  5. selenium-ide-2.3.0 组件在foxfire45.0无法安装的问题

    楼主在安装selenium-ide组件时,尝试了下面两种方式都无法安装: 1.在forfire浏览器进行拖拽安装,页面无任何跳转.拖拽后回车安装,也没任何效果 2.附件组件-从文件安装添加组件,添加了 ...

  6. Java实现文件下载

    一.html <button class="ui-btn ui-btn-primary left20" onclick="downloadXlsTemplate() ...

  7. 网站URL Rewrite(伪静态)设置方法

    1.如果您的服务器支持.htaccess,则无需设置,网站根目录下的.htaccess已经设置好规则.规则详情:http://download.destoon.com/rewrite/htaccess ...

  8. Jmeter扩展组件开发(3) - 实现方法

    继承JavaSamplerClient,四种实现方法讲解 前提 JavaSamplerClient要把四种实现方法都继承,编译器才不会报错. com.demo(package包)右键新建一个secon ...

  9. Shell系列(10)- bash环境变量(3)

    环境变量与用户自定义变量的区别 环境变量是全局变量,用户自定义变量是局部变量. 用户自定义变量只在当前的 shell 中生效,环境变量在当前 shell 和这个 shell 的所有子 shell 中生 ...

  10. requests接口测试-requests的安装

    requests接口测试-requests的安装 安装常见问题 提示连接不上,443问题 一般是因为浏览器设置了代理,关闭代理. 网络加载慢,设置国内镜像地址 1.pip安装 2.pycharm安装 ...