A 瓜瓜的春天 传送门

题意:电梯前有两列队伍,电梯一次可以坐两人,其中

  • 有 25% 的可能,电梯是满的,没有办法乘坐电梯;
  • 有 25% 的可能,电梯是空的,则两队队首都可以乘坐电梯;
  • 有 50% 的可能,电梯里已经有一个人,则两队队首乘坐的概率均等。

求第一列第 i 个人与第二列第 j 个人同时坐上电梯的概率。

分析:概率dp。电梯满的情况相当于没来,这种可能划去。即

  • 有 1/3 的可能,两人同时上
  • 有 1/3 的可能,左边队伍上一人
  • 有 1/3 的可能,右边队伍上一人

因此定义dp[i][j]为左边队伍第i个人与右边队伍第j个人同时在队首的概率。

转移方程为dp[i][j]=1/3*(dp[i-1][j]+dp[i][j-1]+dp[i-1][j-1])

两人同时上的概率为1/3*dp[i][j] 。

另外卡了内存,需要开一个滚动数组。

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353;
int dp[2][10005];signed main()
{int x,y;cin>>x>>y;dp[1][1]=1;int inv3=332748118;for(int i=1;i<=x;i++){for(int j=1;j<=y;j++){if(i==1&&j==1) continue;dp[i&1][j]=(dp[(i-1)&1][j]+dp[i&1][j-1]+dp[(i-1)&1][j-1])*inv3%mod;}}cout<<dp[x&1][y]*inv3%mod<<endl;
}

E 俺拜俺拜 传送门

题意:给定一个由ab组成的字符串,求区间长度大于等于x且ab个数相同的区间是否存在。

分析:时间复杂度上显然只能O(n)扫一遍,令a=1,b=-1,考虑计算序列前缀和{Si},若Si=Sj,说明i到j之间a和b的数量相等。

代码

#include<bits/stdc++.h>
using namespace std;
char c[10005];int main()
{int t;cin>>t;while(t--){map<int,int>mp;mp[0]=0;//int n,x;cin>>n>>x;scanf("%s",c+1);int cnt=0;int f=0;for(int i=1;i<=n;i++){if(c[i]=='a') cnt++;else cnt--;if(mp.count(cnt))//又回到了曾经的数目 说明中间这段ab相等{if(i-mp[cnt]>=x){f=1;cout<<mp[cnt]+1<<" "<<i<<endl;break;}}else mp[cnt]=i;}if(f==0) cout<<"impossible"<<endl;}
}

G 瓜瓜的特别任务

题意:求字符串中子串的最大循环次数。

分析:O(n^2logn)+break。利用后缀数组可以做到O(nlogn)。

代码

#include<bits/stdc++.h>
using namespace std;int main()
{int t;cin>>t;while(t--){string a;cin>>a;int s=a.length();int ans=1;for(int l=1;l<=s;l++)//长度 {if(s/l<=ans) break;for(int i=0;i<s;i++)//起点 {int j=i+l;//终点 if(j>s) break;string tmp=a.substr(i,l);int cnt=1,pos=i;while(pos+l-1<s&&tmp==a.substr(pos+l,l)){pos+=l;cnt++;}ans=max(ans,cnt);}}printf("%d\n",ans);}
}

后缀数组代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+5;
int xx[N],yy[N],cnt[N];
int sa[N],rk[N],ht[N];//sa[i]:排名为i的后缀的起始位置;rk[i]:起始位置为i的后缀的排名
char s[N];
int n;void getsa(int n,int M)
{int i,j,p,*x=xx,*y=yy;for(i=0;i<M;i++)cnt[i]=0;for(i=0;i<n;i++)cnt[x[i]=s[i]]++;for(i=1;i<M;i++)cnt[i]+=cnt[i-1];for(i=n-1;i>=0;i--)sa[--cnt[x[i]]]=i;for(j=1,p=1;p<n;j<<=1,M=p){for(p=0,i=n-j;i<n;i++)y[p++]=i;for(i=0;i<n;i++)if(sa[i]>=j)y[p++]=sa[i]-j;for(i=0;i<M;i++)cnt[i]=0;for(i=0;i<n;i++)cnt[x[y[i]]]++;for(i=1;i<M;i++)cnt[i]+=cnt[i-1];for(i=n-1;i>=0;i--)sa[--cnt[x[y[i]]]]=y[i];for(swap(x,y),p=1,x[sa[0]]=0,i=1;i<n;i++)x[sa[i]]=(y[sa[i-1]]==y[sa[i]]&&y[sa[i-1]+j]==y[sa[i]+j])?p-1:p++;}
}void getht(int n)//求完这个才最终求出sa 并求出rk ht
{int i,j,k=0;for(i=1;i<=n;i++)rk[sa[i]]=i;for(i=0;i<n;ht[rk[i++]]=k)for(k?k--:0,j=sa[rk[i]-1];s[i+k]==s[j+k];k++);for(i=n;i;i--)rk[i]=rk[i-1],sa[i]++;
}int dp[N][20];
void RMQ()
{for(int i=1;i<=n;i++) dp[i][0]=ht[i];for(int j=1;(1<<j)<=n;j++){for(int i=1;i+(1<<j)-1<=n;i++)dp[i][j]=min(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);}
}int query(int l,int r)
{int k=0;while((1<<(k+1))<=(r-l+1)) ++k;return min(dp[l][k],dp[r-(1<<k)+1][k]);
}int lcp(int i,int j)
{i=rk[i],j=rk[j];if(i>j) swap(i,j);return query(i+1,j);
}int main()
{int t;scanf("%d",&t);while(t--){scanf("%s",s);n=strlen(s);getsa(n+1,300);//字符串:n+1,300;数字:n+1,离散化后N getht(n);RMQ();int ans=1;//最少是1 for(int i=1;i<=n;i++){for(int j=1;j+i<=n;j+=i){int now=lcp(j,j+i);int num=now/i+1;int k=j-(i-now%i);if(k>0&&lcp(k,k+i)>=i) num++;ans=max(ans,num);}}printf("%d\n",ans);}
}

H 磊爷与佣兵战记

题意:n个好友,m对关系,初始战斗力全为0。当一个好友战斗力提升x时会带动他的好友战斗力提升x(但是不会带动好友的好友再次提升)。
给定 q个操作:

  • 1 p x,代表某人战斗力提升 x;
  • 2 p,代表查询某人的战斗力。

分析:按度分块,将度数小于等于根号m的点作为大点,对于度数大于根号m的点作为小点。更新小点时,对周围的点暴力更新即可;更新大点时,另开一个lazy数组,更新在lazy数组上,查询时加上周围大点的值即可。

时间复杂度:q(m^(1/2)+m^(1/3))

小点O(m^(1/2))更新,O(1)查询;大点O(1)更新,O(m^(1/3))查询。
由x^x(1/2)=m 可知 x=m^(2/3),即当每个点都是大点时大点个数最多为m^(2/3),每个点都连着m^(1/3)条边。

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=2e5+5;
vector<int>g[maxn],g2[maxn];
int f[maxn];
int lazy[maxn];signed main()
{   int n,m;cin>>n>>m;for(int i=1;i<=m;i++){int u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}int t=sqrt(n);for(int i=1;i<=n;i++){if(g[i].size()>t){for(int j:g[i]){g2[j].push_back(i);}}}int q;cin>>q;while(q--){int op;cin>>op;int p,x;if(op==1){cin>>p>>x;f[p]+=x;if(g[p].size()<=t){             for(int j:g[p]) f[j]+=x;}else{lazy[p]+=x;}          }else{cin>>p;int now=f[p];for(int i:g2[p]) now+=lazy[i];cout<<now<<endl;}}
}

浙江农林大学第二十一届程序设计竞赛校选拔赛A E G H相关推荐

  1. 浙江农林大学第二十一届程序设计竞赛校选拔赛(同步)

    瓜瓜的A+B #include <iostream> using namespace std;typedef long long ll;ll qmi(ll a, ll b, ll p) { ...

  2. 浙江农林大学蓝桥杯程序设计竞赛校选拔赛(同步赛)签到题ABFGHIJ

    A. uu与糖果 链接:https://ac.nowcoder.com/acm/contest/12479/A 来源:牛客网 题目描述 uu是一个伟大的魔法师,她有n堆糖果. 由于她想得到更多的糖果, ...

  3. 浙江农林大学第二十二届程序设计竞赛部分题解

    浙江农林大学第二十二届程序设计竞赛 目录 瓜瓜打游戏(EASY) 题目思路 题目代码 瓜瓜喜欢做 A + B 题目思路 题目代码 瓜瓜不想上电工课 题目思路 题目代码 瓜瓜的 01 串 题目思路 题目 ...

  4. 2016年浙江财经大学信工学院程序设计竞赛题解

    代码为本人出于爱好 验题时所写,如有错误,敬请指出. 题面$pdf$为本人排版,不到之处,还请海涵.  联系方式$QQ$:$774388357$  浙江财经大学 $14$软件工程 周甄陶 相关阅读:记 ...

  5. 浙江农林大学第二十届程序设计竞赛暨团体程序设计天梯赛选拔赛(同步赛) K.来自良心出题人wzc的简单题

    链接 来源:牛客网 题目描述 罗德岛训练室今天的使用人是干员w,她的任务是使用手上的三个遥控炸弹,尽可能摧毁最大价值的目标. 测试区域是一个nn的矩阵,w可以选择任意格子安放炸弹,如果选择了位置[i] ...

  6. 来自wzc的简单拓扑dp———浙江农林大学第二十届程序设计竞赛暨团体程序设计天梯赛选拔赛(同步赛)

    传送门 题目描述 (良心出题人wzc说这是个简单拓扑dp,它就必然是一个简单拓扑dp,wzc是不会骗人的) wzc在一张拓扑图上,他所在的起始位置被标记为0.除了起始位置外,还有被1到n这n个整数所标 ...

  7. 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 部分题解

    A-ID and password 签到题. #include <iostream> #include <cstdio> #include <bits/stdc++.h& ...

  8. 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛题解

    A,C,I签到题,只搞了8题,还一题是神仙做的,我不会 链接:https://www.nowcoder.com/acm/contest/122/B 来源:牛客网 取石子 时间限制:C/C++ 1秒,其 ...

  9. 第九届浙江财经大学信息学院大学生程序设计竞赛

    A:水水更健康 时间限制: 1 Sec   内存限制: 128 MB [ 提交][ 状态][ 讨论版] 题目描述 zhourist是zufeoj的Rank2.他决定向Rank1发起进攻号角.于是他要刷 ...

最新文章

  1. 基于DevExpress的SpreadsheetControl实现对Excel的打开、预览、保存、另存为、打印(附源码下载)
  2. msb Lesson00_Object_Class.scala
  3. 遍历文件夹下的子文件夹的时候,文件夹名字包含逗号或者空格
  4. StringTokenizer的使用
  5. 深度模型不work?这有一份超全的Debug检查清单
  6. Data - 信息获取途径汇总
  7. Bailian4074 积水量【序列处理】
  8. 数据结构——课程设计
  9. IEEE论文latex模板
  10. 什么是socket通信
  11. 报错the confidence keyword argument is only available if OpenCV is installed的解决方法
  12. python vimdiff_技巧:Vimdiff 使用
  13. Robcup2D足球学习记录【2020.01.18】
  14. 与十俱进 2018双11狂欢看淘宝技术创新力
  15. teablue数据分析_数据分析-05 数据可视化
  16. Ribbon负载均衡策略初步解读
  17. “药药切克闹”系列-基于STM32触摸屏的超级无敌智能电子密码锁(仿手机键盘26键设计,密码支持英文大写+英文小写+数字)
  18. 深入理解JVM:java对象的创建过程?
  19. python构建指数平滑预测模型
  20. 新近开发了一款Android应用奶爸指南

热门文章

  1. OP_PUSH_TX技术背后的故事
  2. Redhat更换yum源
  3. Webstorm2018激活和汉化详细步骤
  4. 上海交通大学出版社python教材答案_上海交通大学出版社python答案
  5. c语言link.exe错误,C语言,执行 link.exe 时出错
  6. 李笑来python自学_自学是门手艺--李笑来
  7. Caused by: java.net.ConnectException: Call From hadoop1/192.168.1.201 to hadoop1:8020 failed on conn
  8. CG原画绘画教程之人物-张聪-专题视频课程
  9. 【Java】【Lambda】东京奥运奖牌排序
  10. Linux实战(一):服务器应用迁移