一定别删大括号,检查是;还是,

ceil函数里面要写double,否则根本没用!!!!!!!

T1 打表

正解:打表

考场上很难真正把柿子理解着推出来

况且想要理解题意就很难,比如我就理解错了

半猜着读题思考,结果啥也不对

首先,柿子是:

$\frac{\sum_{i=1}^{2^k-1}|A_i-A_{ans}|}{2^k}$

证明用归纳法:

设$P_i$表示还有$i$个位置没有确定,期望值是剩下的数与正确输出差的平均值,也就是先假设答案的那个柿子正确

当$i=1$时,$P_1$是对的,比较好想

然后推广到$P_{i-1}$,这时的状态是比$P_i$少确定一位,这时两个$CPU$会选择同一个位置到$P_i$的状态,

那么他们的决策一定是相反的因为剩下的数与正确输出差的和是一定的

因此$P_i$也是正确的,因为选择同一位相当于将剩下的数分为了两个不相交集合

 1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 namespace AE86{
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();}return x*f;
9 }inline void write(int x,char opt='\n'){
10 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
11 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
12 for(int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
13 }using namespace AE86;
14
15 const int NN=3e5+5,p=1e9+7;
16 int k,ans,a[NN],sum;
17
18 inline int qmo(int a,int b){
19 int ans=1,c=p; a%=c;
20 while(b){
21 if(b&1) ans=(ans*a)%c;
22 b>>=1; a=(a*a)%c;
23 }return ans;
24 }
25
26 namespace WSN{
27 inline short main(){
28 k=read();ans=read();
29 for(int i=0;i<(1<<k);i++)a[i]=read();
30 for(int i=0;i<(1<<k);i++)
31 (sum+=abs(a[i]-a[ans]))%=p;
32 write(sum*qmo(qmo(2,k),p-2)%p);
33 return 0;
34 }
35 }
36 signed main(){return WSN::main();}

T2 蛇

黑色神题

首先要明白蛇的路径一定是这样的:

本图片粘贴自学长博客

然后分段考虑,

首先头部和尾部的两段往返可以用哈希处理出来,

然后考虑中间的扭动部分

设$dp_{i,j,k}$表示位置是$(i,j)$的时候匹配串长度为$k$的方案数,

然后进行$dp$的时候亲定一个方向,$dp$上面再加一维表示上下走还是左右走

这样的话做完一遍后把字符串反转再来一遍就行

至于考场上为了压行让代码变得好看误把大括号删掉痛失$30$分就让人很难受。。。。。。。

 1 #include<bits/stdc++.h>
2 #define int long long
3 #define ULL unsigned long long
4 #define zheng 0
5 #define fannn 1
6 using namespace std;
7 namespace AE86{
8 inline int read(){
9 int x=0,f=1;char ch=getchar();
10 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
11 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
12 }inline void write(int x,char opt='\n'){
13 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
14 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
15 for(int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
16 }using namespace AE86;
17
18 const int NN=2005,p=1e9+7;
19 const ULL base=131;
20 int n,m,a[2][NN],b[NN],dp[2][NN][NN<<1][2],ans;
21 char ch[NN];
22 ULL pw[NN],haa[2][NN][2],hab[NN];
23 inline void init(){
24 scanf("%s",ch+1);n=strlen(ch+1);
25 pw[0]=1; for(int i=1;i<=max(m,n);i++) pw[i]=pw[i-1]*base;
26 for(int i=1;i<=n;i++) a[0][i]=ch[i]-'a'+1;
27 scanf("%s",ch+1);for(int i=1;i<=n;i++) a[1][i]=ch[i]-'a'+1;
28 scanf("%s",ch+1);m=strlen(ch+1);
29 for(int i=1;i<=m;i++){
30 b[i]=ch[i]-'a'+1;
31 hab[i]=hab[i-1]*base+(ULL)b[i];
32 }
33 }
34 inline ULL ask(int x,int fx,int l,int r){
35 if(fx==zheng) return haa[x][r][zheng]-haa[x][l-1][zheng]*pw[r-l+1];
36 else return haa[x][r][fannn]-haa[x][l+1][fannn]*pw[l-r+1];
37 }
38 inline ULL get(int l,int r){return hab[r]-hab[l-1]*pw[r-l+1];}
39 inline void calc(){
40 for(int i=0;i<2;i++){
41 for(int j=1;j<=n;j++)
42 haa[i][j][zheng]=haa[i][j-1][zheng]*base+(ULL)a[i][j];
43 for(int j=n;j>=1;j--)
44 haa[i][j][fannn]=haa[i][j+1][fannn]*base+(ULL)a[i][j];
45 }
46 for(int i=0;i<2;i++) for(int j=1;j<=n;j++){
47 dp[i][j][1][0]=(a[i][j]==b[1]);
48 for(int k=2;k<=j;k++)
49 dp[i][j][k<<1][1]=((ask(i^1,fannn,j,j-k+1)==get(1,k))&&(ask(i,zheng,j-k+1,j)==get(k+1,k<<1)));
50 }
51 for(int k=1;k<=m;k++) for(int i=0;i<2;i++)
52 for(int j=1;j<=n;j++) if(a[i][j]==b[k]){
53 (dp[i][j][k][0]+=dp[i][j-1][k-1][0]+dp[i][j-1][k-1][1])%=p;
54 (dp[i][j][k][1]+=dp[i^1][j][k-1][0])%=p;
55 }
56 for(int i=0;i<2;i++) for(int j=1;j<=n;j++) for(int k=0;k<=m;k++){
57 int res=(m-k)>>1; if(((m-k)&1)==1||res==1) continue;
58 if(m==k||(j+res<=n&&ask(i,zheng,j+1,j+res)==get(k+1,k+res)&&ask(i^1,fannn,j+res,j+1)==get(m-res+1,m)))
59 (ans+=dp[i][j][k][0]+dp[i][j][k][1])%=p;
60 }
61 }
62
63 namespace WSN{
64 inline short main(){
65 init();
66 calc();
67 reverse(a[0]+1,a[0]+n+1);
68 reverse(a[1]+1,a[1]+n+1);
69 memset(dp,0,sizeof(dp));
70 calc();
71 if(m==1){
72 for(int i=0;i<2;i++) for(int j=1;j<=n;j++)
73 ans-=(a[i][j]==b[1]);
74 }
75 if(m==2){
76 for(int i=0;i<2;i++) for(int j=1;j<=n;j++)
77 ans-=(a[i][j]==b[1]&&a[i^1][j]==b[2]);
78 }write(ans);
79 return 0;
80 }
81 }
82 signed main(){return WSN::main();}

T3 购物

考场上想到正解,结果无法给出证明就遗憾收场了,因为怕爆零

可是因为$ceil$没有用$double$还是爆零了。。。。

每个数都有一个关于$k$的取值范围区间

发现加上一个数后他和原来的区间一定会产生交集

然后边维护前缀和,边判断有几段区间没有重叠,减去没有重叠的部分就是$k$的覆盖范围

 1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 namespace AE86{
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();}return x*f;
9 }inline void write(int x,char opt='\n'){
10 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
11 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
12 for(int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
13 }using namespace AE86;
14
15 const int NN=1e5+5;
16 int n,a[NN],ans,sum,jian;
17 namespace WSN{
18 inline short main(){
19 n=read();
20 for(int i=1;i<=n;i++) a[i]=read(),sum+=a[i];
21 sort(a+1,a+n+1);
22 for(int i=1;i<=n;i++){
23 int l=ceil(a[i]/2.0),r=a[i];
24 int ll=ceil(a[i-1]/2.0),rr=a[i-1];
25 if(rr<l) jian+=l-rr-1;
26 a[i]+=a[i-1];
27 }
28 write(sum-jian);
29 return 0;
30 }
31 }
32 signed main(){return WSN::main();}

T4 ants

正解是回滚莫队。。。。丝毫没学过

然后下午就是又开始学习知识,竟是$OJ$上的一道原题

连样例都一样。。。。

每一个块内维护两个数组,$lb_i$,$rb_i$,是以值为下标的数组

表示$i$的左边的连续编号,右边的连续编号长度

在移动指针的时候维护最大的连续编号长度就行,注意重点在清除

开个栈记录更新的点和原始权值,最后只清空更改过的就行

 1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 namespace AE86{
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();}return x*f;
9 }inline void write(int x,char opt='\n'){
10 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
11 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
12 for(int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
13 }using namespace AE86;
14
15 const int NN=1e5+5;
16 int n,m,a[NN],top,sq;
17 int ls[NN],rs[NN],res[NN];
18
19 struct SNOW{int l,r,k,id;}q[NN];
20 struct stac{int pos,val;}stk[NN];
21
22 inline bool cmp(SNOW a,SNOW b){return a.k==b.k?a.r<b.r:a.l<b.l;}
23
24 namespace WSN{
25 inline short main(){
26 // freopen("1.in","r",stdin);
27 n=read();m=read();sq=sqrt(n);
28 for(int i=1;i<=n;i++) a[i]=read();
29 for(int i=1;i<=m;i++){
30 int l=read(),r=read();
31 q[i]=(SNOW){l,r,(l-1)/sq+1,i};
32 }
33 sort(q+1,q+m+1,cmp);
34
35 int l=1,r=0,ans=0;
36 for(int i=1;i<=m;i++){
37 int ql=q[i].l,qr=q[i].r;
38 if(q[i].k!=q[i-1].k){
39 memset(ls,0,sizeof(ls));
40 memset(rs,0,sizeof(rs));
41 l=r=q[i].k*sq; ans=0;
42 }
43 while(r<qr){
44 ++r;
45 ls[a[r]]=ls[a[r]-1]+1;
46 rs[a[r]]=rs[a[r]+1]+1;
47 int len=ls[a[r]]+rs[a[r]]-1;
48 int L=a[r]-ls[a[r]]+1;
49 int R=a[r]+rs[a[r]]-1;
50 ls[R]=rs[L]=len;
51 ans=max(ans,len);
52 }
53 int tmp=ans; top=0;
54 for(int j=ql;j<=min(qr,l);j++){
55 ls[a[j]]=ls[a[j]-1]+1;
56 rs[a[j]]=rs[a[j]+1]+1;
57 int len=ls[a[j]]+rs[a[j]]-1;
58 int L=a[j]-ls[a[j]]+1;
59 int R=a[j]+rs[a[j]]-1;
60 stk[++top]=(stac){R,ls[R]};
61 stk[++top]=(stac){L,rs[L]};
62 ls[R]=rs[L]=len;
63 tmp=max(tmp,len);
64 }
65 for(int j=top;j;j--)
66 if(j&1) ls[stk[j].pos]=stk[j].val;
67 else rs[stk[j].pos]=stk[j].val;
68 for(int j=ql;j<=min(qr,l);j++)
69 ls[a[j]]=rs[a[j]]=0;
70 res[q[i].id]=tmp;
71 }
72 for(int i=1;i<=m;i++) write(res[i]);
73 return 0;
74 }
75 }
76 signed main(){return WSN::main();}

麻辣烫真香!!!!!!!!

Noip模拟45 2021.8.21的更多相关文章

  1. Noip模拟58 2021.9.21(中秋祭&&换机房祭)

    第一次在学校过中秋节,给家里人视频电话,感觉快回家了很开心, 然后还吃了汉堡喝饮料非常爽,颓废了一会儿还换了新机房,$Linux2.0$非常dei,少爷机也非常快, 发现好像测评机又成了老爷机,这就是 ...

  2. Noip模拟22 2021.7.21

    T1 d 简化题意就是找到相对平均长宽的偏移量较大的矩形给他删掉 可以说是个贪心,按照a,b分别为第一关键字排序 然后假装删去要求的那么多个按a排序的较小的,然后再去b中, 找到 删去的a中的那几个矩 ...

  3. noip模拟45[真是啥也不会]

    noip模拟45 solutions 真是一个题都不会了,然而考完试之后我在10min之内切掉了最后一个题 话说这是为什么呢, 因为最后一个是回滚莫队的大板子,然而我忘记了,不不不,是没有记起来过 T ...

  4. 2021.8.21考试总结[NOIP模拟45]

    T1 打表 由归纳法可以发现其实就是所有情况的总和. $\frac{\sum_{j=1}^{1<<k}(v_j-v_{ans})}{2^k}$ $code:$ 1 #include< ...

  5. Noip模拟70 2021.10.6

    T1 暴雨 放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理 我是直接$dp$的,可能代码的复杂度比那种的稍微小一点 设$f[i][j][p][0/1]$表示考虑了前$i$列, ...

  6. Noip模拟76 2021.10.14

    T1 洛希极限 上来一道大数据结构或者单调队列优化$dp$ 真就没分析出来正解复杂度 正解复杂度$O(q+nm)$,但是据说我的复杂度是假的 考虑一个点转移最优情况是从它上面的一个反$L$形转移过来 ...

  7. Noip模拟69 2021.10.5

    考场拼命$yy$高精度结果没学好$for$循环痛失$50pts$,当场枯死 以后一定打对拍,要不考后会... T1 石子游戏 首先要知道典型的$NIM$博弈,就是说如果所有堆石子个数的异或和为$0$则 ...

  8. Noip模拟63 2021.9.27(考场惊现无限之环)

    T1 电压机制 把题目转化为找那些边只被奇数环包含. 这样的话直接$dfs$生成一棵树,给每个点附上一个深度,根据其他的非树边都是返祖边 可以算出环内边的数量$dep[x]-dep[y]+1$,然后判 ...

  9. Noip模拟61 2021.9.25

    T1 交通 考场上想了一个$NPC$.应该吧,是要求出图里面的所有可行的不重复欧拉路 无数种做法都无法解出,时间也都耗在这个上面的,于是就考的挺惨的 以后要是觉得当前思路不可做,就试着换一换思路,千万 ...

随机推荐

  1. C# Dapper基本三层架构使用 (一、架构关系)

    Dapper是一款轻量级ORM工具.如果你在小的项目中,使用Entity Framework.NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀.你又觉得ORM省时省力,这时Dapp ...

  2. JS021. 拦截事件的显式处理与默认动作(Web API: event.preventDefault)

    Web API - event.preventDefault( ) Event 接口的  preventDefault( ) 方法,告诉 user agent :如果此事件没有被显式处理,它默认的动作 ...

  3. golang isPowerOfTwo判断是否是2的幂

    iota.go   strconv包 func isPowerOfTwo(x int) bool { return x & (x -1) } 了解n&(n-1)的作用如下: n& ...

  4. Baidu初试题分享(Java高级工程师)

    [特别声明:文章仅用来借鉴学习,不用于其他商业化活动] 1.JDK和JRE区别? JDK是整个JAVA的核心,包括了Java运行环境JRE,一堆Java工具和Java基础的类库.通过JDK开发人员将源 ...

  5. 编译执行 VS 解释执行

    一般编译程序从对源程序执行途径的角度不同,可分为解释执行和编译执行. 所谓解释执行是借助于解释程序完成,即按源程序语句运行时的动态结构,直接逐句地边分析边翻译并执行.像自然语言翻译中的口译,随时进行翻 ...

  6. 学习PHP中的信息格式化操作

    在国际化组件的学习过程中,我们已经接触过了 NumberFormatter 这种数字的格式化操作,它可以让我们将数字转换成标准格式.货币.本地语言等形式.今天我们来学习的是另一种专门用于信息格式化的类 ...

  7. 深入学习Composer原理(一)

    Composer作为PHP的包管理工具,为PHPer们提供了丰富的类库,并且让PHP重焕新生,避免被时代淘汰的悲剧.可以说,Composer和PHP7是现在PHP开发者的标配,如果你还没用过Compo ...

  8. Shell系列(27)- 条件判断之两个整数比较

    两个整数之间比较 Liunx中,都是字符型,但是加了数值比较的选项,所以自动将他们转换成了整数型进行比较,不需要对这些参数进行变量转换或者重新声明 测试选项 作用 整数1 -eq 整数2 判断整数1是 ...

  9. ubuntu安装git并配置SSH Key

    安装git apt-get install git 配置git的用户名和邮箱: ssh-keygen -trsa -C "youremail@example.com" ssh-ke ...

  10. 动图图解GC算法 - 让垃圾回收动起来!

    原创:码农参上(微信公众号ID:CODER_SANJYOU),欢迎分享,转载请保留出处. 提到Java中的垃圾回收,我相信很多小伙伴和我一样,第一反应就是面试必问了,你要是没背过点GC算法.收集器什么 ...