D RGB Substring

题意

给定一个只含RGB三种字符的字符串,问最少修改多少个字符,能使得修改后的字符串存在一个长度为\(k\)的子串是...RGBRGB...这个循环字符串的子串。

分析

  • 只含有3种字符,考虑从...RGBRGB...这个循环字符串大力枚举。
  • 子串要和这个循环字符串匹配只有三种情况,即开头是RGB,GBR和BRG。
  • 预处理出这三种匹配的字符匹配个数的前缀和,然后可以O(1)求出长度为k的子串对应这种匹配需要修改多少个字符,取最小值即可。

代码

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N=2e5+50;
  4. int q,n,k;
  5. char s[N];
  6. int dp[N][3];
  7. char to(int x){
  8. if(x==0){
  9. return 'R';
  10. }else if(x==1){
  11. return 'G';
  12. }else{
  13. return 'B';
  14. }
  15. }
  16. int main(void){
  17. // freopen("in.txt","r",stdin);
  18. scanf("%d",&q);
  19. while(q--){
  20. scanf("%d%d",&n,&k);
  21. scanf("%s",s+1);
  22. //计算三种模式匹配下,到第i位匹配字符个数的前缀
  23. for(int i=0;i<=n;i++){
  24. dp[i][0]=dp[i][1]=dp[i][2]=0;
  25. }
  26. for(int i=0;i<3;i++){
  27. for(int j=1;j<=n;j++){
  28. dp[j][i]=dp[j-1][i];
  29. if(to((i+j-1+3)%3)==s[j]){
  30. dp[j][i]++;
  31. }
  32. }
  33. }
  34. int ans=0x3f3f3f3f;
  35. for(int i=0;i<3;i++){
  36. for(int j=1;j+k-1<=n;j++){
  37. ans=min(ans,k-(dp[j+k-1][i]-dp[j-1][i]));
  38. }
  39. }
  40. printf("%d\n",ans);
  41. }
  42. return 0;
  43. }

F K-th Path

题意

给一个带权简单无向图,求第k小的最短路。

分析

  • k范围很小。

  • 所求的最短路只可能出现两种情况:

    • 只含一条边的前k短路。
    • 由只含一条边的前k短路组成的最短路。
  • 因此取出前k小边,离散化后跑floyd,再排序取第k小最短路径。

  • 注意,但只含一条边的前k短路不止k条(比如相同的边就有k+1条,边权为x),选择哪一条进行floyd关系不大,简单证明:

    • 如果答案是由一条边组成的,选哪一条答案都一样是x。
    • 如果答案由多条边组成,那么答案肯定小于x,因为单条边的x就不止k个了,而小于x的又由多条边组成的,那么肯定是由小于x的单条边来组成,和x相同的边没有关系。

代码

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N=2e5+50;
  4. //400条边离散化会有800个点
  5. const int M=1005;
  6. typedef long long ll;
  7. struct es{
  8. int u,v,w;
  9. bool operator <(const es& rhs)const{
  10. return w<rhs.w;
  11. }
  12. }es[N];
  13. int n,m,k;
  14. map<int,int> mp;
  15. ll dis[M][M];
  16. int main(void){
  17. // freopen("in.txt","r",stdin);
  18. scanf("%d%d%d",&n,&m,&k);
  19. for(int i=1;i<=m;i++){
  20. scanf("%d%d%d",&es[i].u,&es[i].v,&es[i].w);
  21. }
  22. sort(es+1,es+1+m);
  23. //取出前k小的边
  24. for(int i=1;i<M;i++){
  25. for(int j=1;j<M;j++){
  26. dis[i][j]=dis[j][i]=1e18;
  27. if(i==j){
  28. dis[i][j]=0;
  29. }
  30. }
  31. }
  32. int cnt=0;
  33. for(int i=1;i<=k;i++){
  34. if(mp.count(es[i].u)==0){
  35. mp[es[i].u]=++cnt;
  36. }
  37. if(mp.count(es[i].v)==0){
  38. mp[es[i].v]=++cnt;
  39. }
  40. dis[mp[es[i].u]][mp[es[i].v]]=dis[mp[es[i].v]][mp[es[i].u]]=1ll*es[i].w;
  41. }
  42. for(int a=1;a<=cnt;a++){
  43. for(int i=1;i<=cnt;i++){
  44. for(int j=1;j<=cnt;j++){
  45. dis[i][j]=min(dis[i][j],dis[i][a]+dis[a][j]);
  46. }
  47. }
  48. }
  49. vector<ll> ans;
  50. for(int i=1;i<=cnt;i++){
  51. for(int j=i+1;j<=cnt;j++){
  52. ans.push_back(dis[i][j]);
  53. }
  54. }
  55. sort(ans.begin(),ans.end());
  56. printf("%lld\n",ans[k-1]);
  57. return 0;
  58. }

Codeforce1196_D_F的更多相关文章

  1. 表格控件表头栏目(Column)与数据表头步

    不用手工增加栏目的列,也就是Column,由数据库的查询结果自动创建. 用的是Delphi2010,安装了Dev,用CxGrid显示数据库查询结果.用什么控件没有关键,道理相同的.

随机推荐

  1. 论文阅读:Fast, Scalable, and Programmable Packet Scheduler in Hardware

    摘要: 随着链接速度的提高和CPU扩展速度的放缓,软件中的数据包调度会导致较低的精度和较高的CPU利用率. 通过将数据包调度卸载到诸如NIC之类的硬件,可以潜在地克服这些缺点.然而为了保持软件分组调度 ...

  2. openwrt 下python程序后台运行,并将打印信息保存文件

    python -u gw20191223.py  > test.log 1 2 & "python" 表示执行python代码 "-u" 表示不启 ...

  3. WordPress过滤器(Filters):apply_filters和add_filter

    过滤器(Filters)对于WordPress来说是非常重要的,它极大地扩展了WordPress的定制能力,提高了WordPress的灵活性.无论是制作主题还是开发插件,我们基本上都会或多或少地使用到 ...

  4. .item布局设置分割线

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...

  5. CSS Selectors

    CSS selectors are used to "find" (or select) HTML elements based on their element name, id ...

  6. halcon

    读图write_imageread_image *图片路径 FilePath:='d:/pic/demo.jpg' *判断文件是否存在 file_exists ('/bin/cc', FileExis ...

  7. 石川es6课程---1-2、ES6简介

    石川es6课程---1-2.ES6简介 一.总结 一句话总结: 从ECMAScript的历史发展来看,太顺了的时候总会遇到一挫折,比如ecma4 1.ECMAScript 和 JavaScript关系 ...

  8. vscode 配置go环境 可调试

      1.go下载安装并配置环境变量 2.安装工具: 1)安装gocode go get -u -v github.com/nsf/gocode 2)安装godef go get -u -v githu ...

  9. webSocket通信

    针对webSocket通信总结: 1.webSocket通信原理图: 2.webSocket通信实例 参考地址1:https://www.cnblogs.com/cjm123/p/9674506.ht ...

  10. PHP CI框架数据库常用操作

    例子 <?php defined('BASEPATH') OR exit('No direct script access allowed'); class Menu extends CI_Co ...