cf传送门

前言

在gym看到,知道山东省很nb所以写了。
补题含大量借鉴大佬代码()

F Birthday Cake

题意:给定n个串,求有多少对串能拼出平方串(能够表示成两个相同的字符串连接在一起的,即AA)。
思路:队友想出来了,就是少考虑了一个情况。
考虑这样一个串:abcdyouareabcd。
前后缀相同。我们可以计数有多少个串youare。
这两个串可以拼接在一起。
还有一种情况就是两个串一模一样。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 4e5+5;
char s[maxn];
typedef long long ll;// 自然溢出会被卡啊const int mod1 = 1e9+7;   // 两个模数,再弄个Pair,减少crash
const int mod2 = 998244353;
const int p = 101;ll base1[maxn],base2[maxn];
ll hs1[maxn],hs2[maxn];map<pair<ll,ll>,int> mp,mp2;  // 计数菌
// mp用来存整串的hash, mp2用来存去掉相同前后缀后中间部分的hash
// 取子串的hash
pair<ll,ll> subs(int l,int r){ll ans1=(hs1[r]+mod1-hs1[l-1]*base1[r-l+1]%mod1)%mod1;ll ans2=(hs2[r]+mod2-hs2[l-1]*base2[r-l+1]%mod2)%mod2;return make_pair(ans1,ans2);
}int main(){int n;scanf("%d",&n);// 初始化处理hashbase1[0]=1;base2[0]=1;for(int i=1;i<=maxn;++i){base1[i]=base1[i-1]*p%mod1;base2[i]=base2[i-1]*p%mod2;}ll ans = 0;while(n--){scanf("%s",s+1);int len = strlen(s+1);hs1[0]=0;hs2[0]=0;for(int i=1;i<=len;++i){hs1[i] = (hs1[i-1]*p+s[i]-'a'+1)%mod1;hs2[i] = (hs2[i-1]*p+s[i]-'a'+1)%mod2;}pair<ll,ll> o = make_pair(hs1[len],hs2[len]);ans += mp[o]; // 加上跟该串一模一样的mp[o]++;ans += mp2[o]; // 加上内部和{该串整串}一样的串for(int i=1;2*i<len;++i){// 1 - i, len-i+1 - leno = subs(1,i);pair<ll,ll> o2 = subs(len-i+1,len);if(o==o2){// 前后缀一样o = subs(i+1,len-i);// 中间部分ans += mp[o]; // 加上整串和该串内部一样的串mp2[o]++;}}}printf("%lld\n",ans);
}

J Tuition Agent

题意:n个人,每个人有三个属性,rank,X和Y。要把每个人划分为老师和学生,当老师的rank小于学生的rank,可以将这老师和学生进行配对。配出一对赚k元,将i号变成老师-Xi元,变成学生-Yi元。求最后最多的钱。可能为负。数据随机生成。1e5。
思路:先用R排序(倒序)。
由于老师肯定比学生高级,因此后面放老师相对更优。
d p [ 到 第 几 个 人 ] [ 前 面 有 多 少 个 未 配 对 学 生 ] dp[到第几个人][前面有多少个未配对学生] dp[到第几个人][前面有多少个未配对学生]
表示能得到的最多钱。
// step1:做导师
d p [ i ] [ j ] = m a x ( d p [ i ] [ j ] , d p [ i − 1 ] [ j + 1 ] − X i + k ) ; dp[i][j] = max(dp[i][j], dp[i-1][j+1] - Xi + k); dp[i][j]=max(dp[i][j],dp[i−1][j+1]−Xi+k); // 配对掉一个学生
// step2:做学生
d p [ i ] [ j ] = m a x ( d p [ i ] [ j ] , d p [ i − 1 ] [ j − 1 ] − Y i ) ; dp[i][j] = max(dp[i][j], dp[i-1][j-1] - Yi); dp[i][j]=max(dp[i][j],dp[i−1][j−1]−Yi); // 成为学生
注意到数据随机生成,猜测未配对数较小。
于是暴力跑。
后面数据好像加强了,怎么都过不了了,违背了随机生成的初心(不是)。这道题成为一道无解题。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
typedef long long ll;
const int inf = 1e9;struct _node{int x,y,r;
}node[maxn];bool cmp(_node a,_node b){return a.r<b.r;
}ll dp[3][3003];int main(){int t;scanf("%d",&t);while(t--){int n,k;scanf("%d%d",&n,&k);for(int i=1;i<=n;++i){scanf("%d%d%d",&node[i].r,&node[i].x,&node[i].y);}// 注意rank小的才能教rank大的sort(node+1,node+1+n,cmp);int m = min(min(100000000/n+1,n),502);for(int i=1;i<=m;++i) dp[0][i]=-inf;dp[0][0] = 0;for(int i=1;i<=n;++i){for(int j=0;j<=m;++j) dp[1][j]=-inf;for(int j=0;j<=m;++j){// 未配对的有j个//                       加入一个tut,未配对的tut就多了1if(j<m)dp[1][j+1]=max(dp[1][j+1],dp[0][j]-node[i].x);//                   加入一个stu,未配对的tut就减1,配对数+1if(j)dp[1][j-1]=max(dp[1][j-1],dp[0][j]-node[i].y+k);elsedp[1][j]=max(dp[1][j],dp[0][j]-node[i].y);}for(int j=0;j<=m;++j) dp[0][j]=dp[1][j];}ll ans = -inf;for(int i=0;i<=m;++i)ans = max(dp[0][i],ans);printf("%lld\n",ans);}
}

2021山东省省赛补题相关推荐

  1. 2021 CCCC天梯赛补题

    前言不想看请直接跳过---- 前言+检讨:天梯赛我拉垮了,我拖了队伍后腿,我有罪. 分析原因,首先是前一个星期训练量不够,没有跟上队友训练的进度,一些基础的STL的用法使用的也不熟练. 第二,没有把S ...

  2. 第十二届蓝桥杯 2021年省赛真题 (Java 大学B组) 第一场

    蓝桥杯 2021年省赛真题 (Java 大学B组 ) #A ASC #B 卡片 朴素解法 弯道超车 #C 直线 直线方程集合 分式消除误差 平面几何 #D 货物摆放 暴力搜索 缩放质因子 #E 路径 ...

  3. 第十二届蓝桥杯 2021年省赛真题 (C/C++ 大学B组)

    蓝桥杯 2021年省赛真题 (C/C++ 大学B组 ) #A 空间 #B 卡片 #C 直线 #D 货物摆放 #E 路径 #F 时间显示 #G 砝码称重 背包 DP #H 杨辉三角形 #I 双向排序 贪 ...

  4. 5_竞赛无人机搭积木式编程——以2021年电赛G题植保无人机国奖标准完整复现为例学习

    竞赛无人机搭积木式编程 --以2021年电赛G题植保无人机国奖标准完整复现为例学习 首先我们需要了解下自动飞行任务执行过程几组关键变量的用法与实际作用效果: flight_subtask_cnt用于控 ...

  5. 第十二届蓝桥杯 2021年省赛真题 (Java 大学A组) 第一场

    蓝桥杯 2021年省赛真题 (Java 大学A组 ) #A 相乘 朴素解法 同余方程 #B 直线 直线方程集合 分式消除误差 平面几何 #C 货物摆放 暴力搜索 缩放质因子 #D 路径 搜索 单源最短 ...

  6. 2021年美赛C题思路

    2021年美赛C题思路: 团队为建模国一获得者,有丰富建模经验,因为需保证建模思路的完整性,更新较慢,怕被D.新号 C题翻译: 确认黄蜂的传言 2019 年 9 月,在加拿大不列颠哥伦比亚省的温哥华岛 ...

  7. 2021年电赛 E题 数字传输

    数字-模拟信号混合传输收发机(E题) 目录 题目 方案 工程文件 题目 (2) 实现数字信号传输. 首先键入4个0~9的一组数字,在发送端进行存储并显示,然后按下发送键对数字信号连续循环传输.在接收端 ...

  8. 林大5.1训练赛补题

    林大5.1训练赛补题 A.凸多边形曼哈顿 E.矩阵快速幂 I.线段dp A.凸多边形曼哈顿 题意:给你一个凸多边形,问你当其中K边形的最大dis[]是多少? 思路:首先是要发现K>=4的时候答案 ...

  9. 2021年美赛F题总结

    2021年美赛F题总结 肝到了早上六点20分才算是把F题的论文交上去了呜呜,最后把论文发给官方的时候3个人紧张死了,检查了7,8遍就怕出一点错,官方不接收我们的文章,那个点已经神志不清了,又在官网不停 ...

最新文章

  1. MySQL数据库实用教程考核_《MySQL数据库实用教程》郑明秋,蒙连超,赵海侠【pdf】...
  2. web工程自动部署(tomcat服务器)
  3. Nginx +uwsgi+django配置
  4. SpringSecurity分布式整合之实现思路分析
  5. 机器学习-Stacking方法的原理及实现
  6. [机器学习] 模型稳定度指标PSI
  7. 学会这一招,轻松玩转 app 中混合应用自动化测试
  8. android 代码操作.db demo,Android实现商品展示效果
  9. java方法重载的好处_Java方法重载浅谈
  10. 在银河麒麟V10操作系统上成功安装lnmp详细步骤
  11. 三亚三姐,三亚海鲜的代言人
  12. MR混合现实头显来啦!宏碁微软产品率先上市
  13. 人生于世上,有几个知己……
  14. PDF在线编辑器的实现
  15. 物联网技术与应用知识点——期末题库
  16. Window-10 Hyper-V 安装 Windows 10
  17. h3c 模拟器 HCL 2.1.2 win10安装,vbox hyper-v vmware 兼容
  18. python 12306登录_Python 12306登陆详细分析及操作
  19. 家庭监控安防行业存在哪些问题?看TSINGSEE青犀视频如何解决
  20. 子类方法中super.父类方法

热门文章

  1. java计算机毕业设计ssm高校校友信息管理系统
  2. 机器学习系列 | 梯度下降算法详解
  3. 文本文件自动计算生成srt字幕格式的文件
  4. 算法--兔子生兔子的问题(费氏数列)
  5. 数据恢复|mac下数据恢复软件推荐
  6. 代码中实现Http的Get请求报401错误,使用浏览器可以正常访问
  7. 海豚浏览器前端面试总结
  8. 通俗理解数据治理之主数据
  9. 抖音最新卡直播广场超快上人技术,反复测试总结最终方法
  10. 清晨开播近100万人观看,快手知识类主播化身“妇女之友”?