当前位置: 首页 > news >正文

CF 训练2

688 div2 C Balanced Bitstring

思路:首先对于区间问题 , 我们可以先思考让它滑动滑动。对于[l,r],向后滑动一位后 ,[l+1 , r+1],因为两次的区间中 , [l+1 ,r]中所有数都是相同的 , 所以 可以得到s[l] = s[r+1] , 那么再向后滑动 , 就有 l+1 = r+2 , 一次类推 , 在1 ~ k中 , 每个数每次 +k , s[x] = s[x+k]的。那么我们就可以对于每个k的区间来进行处理 , 观察它们是否相同。但是对于 ? 的话 ,我们可以先不管他,最后看
1和0的个数是否都 <= k/2 就行了

void solve(){cin>>n>>k;string s;cin>>s;s = '#' + s;for(int i =1;i<=k;++i)str[i] = 0;for(int i=1;i<=k;++i){for(int j =i;j<=n;j +=k){if(s[j] == '?')continue;if(str[i] == 0)str[i] = s[j];else if(str[i] != s[j]){cout<<"NO"<<endl;return;}}}int cnt1 = 0 , cnt0 = 0;for(int i =1;i<=k;++i){if(str[i] == '1')cnt1++;else if(str[i] == '0')cnt0++;}if(cnt1 <=k/2 && cnt0 <= k/2){cout<<"YES"<<endl;return;}cout<<"NO"<<endl;
}

688 div2 D Tree Tag

思路:首先如果一开始 a和b的距离小于 da , 那么爱丽丝赢 。 如果b被追到了死角 , 那么必须db > 2*da 。 最后需要树有一段很长的距离,足够b来躲掉a,也就是树的直径 > 2a,bob才有可能赢

void dfs(int u , int fa){ for(auto to : g[u]){if(vis[to] || to == fa)continue;dis[to] = dis[u] + 1;vis[to] = 1;dfs(to , u);}
}void solve(){cin>>n>>a>>b>>da>>db;for(int i =1;i<=n;++i)g[i].clear();for(int i =1;i<n;++i){int u ,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u); }for(int i =1;i<=n;++i)vis[i] = 0 , dis[i] =  0;dis[a] = 0;dfs(a , 0);if(dis[b] <= da){cout<<"Alice"<<endl;return;}int ma = -1 , Q = 0;for(int i =1;i<=n;++i){if(dis[i] > ma)ma = dis[i] , Q =i;}for(int i =1;i<=n;++i)vis[i] = 0 , dis[i] =  0;dfs(Q , 0);ma = -1;for(int i =1;i<=n;++i){if(dis[i] > ma)ma = dis[i];}if(2 * da >= db){cout<<"Alice"<<endl;return;}cout<<"Bob"<<endl;}

962 div3 E Decode

思路 :还是区间01的问题 , 我们可以把0当作-1 , 1当作 1,如果区间中0和1的数量相等 , 那么就说明区间和为 0 ,对于一个区间为0的区间,我们思考它对答案的贡献。

假设区间为[l,r]的这样一段区间,它对答案的贡献是多少 , 首先左边的贡献是 l , 右边的贡献是 n-r+1 , 根据乘法原理 , 贡献为l*(n-r+1)。 

如何找区间 ,根据前缀和思想 , pre[r] - pre[l-1] = 0 -> pre[l-1] = pre[r]。那么接下来,可以用一个map进行优化 , 时间复杂度就应该是 Onlogn

void solve(){cin>>s;int n = s.size();s = '#' + s;for(int i =1;i<=n;++i)pre[i] = pre[i-1] + (s[i]=='1' ?1 : -1 );map<int,int>mp;int ans = 0;mp[0] =1;for(int i =1;i<=n;++i){ans +=(mp[pre[i]])*(n-i+1);mp[pre[i]] += (i+1); mp[pre[i]]%= mod;ans %= mod;}cout<<ans<<endl;
}

962 div3 F Bomb

思路: 观察到数据非常大 , k 是1e9 , 那么k次的优先队列询问肯定是不行了。这题其实是个很典的题,我们可以二分出来最后每个数的最大值,也就是说,每个数最后肯定会减到 那个最大值或者大于最大值。
那么对于如何二分,我们思考到 , 二分出来的x 越大 ,我们所需要减少的次数cnt 就越少,cnt <= k的话,x就有一个最小值 , 所以是在分界线的右边  ,当我们的cnt >= k 的话就需要 l  = mid , 否则
r = mid -1;
对于每个数可以用掉的次数为 cnt = (ai - x) / bi + 1,那么构成一个等差数列,其中的和也很容易算出来。

还有一个细节就是最后我们用掉的次数可能小于k ,那么多出来的这几次 直接×二分出来的x即可

void solve(){cin>>n>>k;for(int i =1;i<=n;++i)cin>>a[i];for(int i =1;i<=n;++i)cin>>b[i];auto check =[&](int x){int cnt = 0;for(int i =1;i<=n;++i){if(a[i] >= x){cnt += (a[i]-x)/b[i] + 1;}}return cnt >= k;};int l=0 ,r = 2e10;while(l < r){int mid = (l+r+1)>>1;if(check(mid))l =mid;else r = mid -1;}int cnt = 0;int sum = 0;for(int i= 1;i<=n;++i){if(a[i] >= l){int m =(a[i]-l)/b[i] + 1;sum += a[i]*m - m*(m-1)*b[i]/2;cnt += m;}}cout<<sum + l*(k - cnt)<<endl;
}

很细节的一道题 , 多多思考🤔。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 记录使用FlinkSql进行实时工作流开发
  • 如何强化学习神经网络
  • 进程状态(一)---- 运行,阻塞,挂起
  • ESP8266+STM32+阿里云保姆级教程(AT指令+MQTT)
  • HBuilder在uni-admin实现unicloud-map中poi管理
  • linux 虚拟机解压arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2并arm-linux-gcc
  • openEuler使用mariadb
  • C# 组合CancellationTokenSource的使用
  • 搭建日志系统ELK(二)
  • arkhamintelligence 请求头加密 X-Payload 完整逆向分析+自动化解决方案
  • 【CTFWP】ctfshow-web42-52
  • python颠倒一下列表
  • C# LinqToExcel 读取Excel
  • 重生之我们在ES顶端相遇第9 章- 搜索框最常用的功能 - 搜索建议
  • 一个超强的Python机器学习超参优化库
  • 2017前端实习生面试总结
  • canvas 高仿 Apple Watch 表盘
  • co模块的前端实现
  • Promise面试题,控制异步流程
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • vuex 学习笔记 01
  • 创建一个Struts2项目maven 方式
  • 给Prometheus造假数据的方法
  • 我的面试准备过程--容器(更新中)
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 整理一些计算机基础知识!
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • #android不同版本废弃api,新api。
  • #pragma data_seg 共享数据区(转)
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (5)STL算法之复制
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (转)编辑寄语:因为爱心,所以美丽
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .net core 管理用户机密
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .pop ----remove 删除
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [C++] 模拟实现list(二)
  • [C++][STL源码剖析] 详解AVL树的实现
  • [Day 16] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • [Java] 模拟Jdk 以及 CGLib 代理原理
  • [Latex学习笔记]数学公式基本命令
  • [leetcode hot 150]第一百三十七题,只出现一次的数字Ⅱ
  • [Linux] Boot分区满了的处理方法 The volume boot has only 0 bytes disk space remaining
  • [Manacher]【学习笔记】
  • [Spring] Spring事务与事务的传播
  • [SWPU2019]Web1 超详细教程
  • [Unity]出android包出错:java.nio.file.accessdeniedexception
  • [UOJ430]line
  • [vue] vue-seamless-scroll 滚动到第二遍的时候不能进行点击的问题