zoukankan      html  css  js  c++  java
  • cf 1102 B

      题意:求字符串中任意相邻两位是否可以可以由前一个加上任意个x或y屏蔽十位与后一位相等,如果可以需要添加的最少数字是多少,x值为0-9,y值也为0-9,求出任意x,y对应情形下字符串需要添加的最少数字,不满足输出-1,字符串长度小于2e6

      思路:初步算下复杂度,10*10*2e6,所以需要预处理所有情况,防止处理过程中TLE,具体预处理,按照floyd跑出最短路,如果最短路为inf则不可达。

      代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=2e6+7;
     4 char a[maxn];
     5 const int inf=0x3f3f3f3f;
     6 int dis[15][15];
     7 int main()
     8 {
     9     scanf("%s",a);
    10     for(int i=0; i<10; i++)
    11     {
    12         for(int j=0; j<10; j++)
    13         {
    14             for(int k=0; k<10; k++)
    15             {
    16                 for(int l=0; l<10; l++)
    17                 {
    18                     dis[k][l]=inf;
    19                 }
    20             }
    21             for(int k=0;k<10;k++)
    22             {
    23                 dis[k][(k+i)%10]=1;
    24                 dis[k][(k+j)%10]=1;
    25             }
    26             for(int k=0;k<10;k++)
    27             {
    28                 for(int l=0;l<10;l++)
    29                 {
    30                     for(int s=0;s<10;s++)
    31                     {
    32                         dis[l][s]=min(dis[l][k]+dis[k][s],dis[l][s]);
    33                     }
    34                 }
    35             }
    36             int ans=0;
    37             int fi=0;
    38             for(int k=0; k<strlen(a)-1; k++)
    39             {
    40                 if(dis[a[k]-'0'][a[k+1]-'0']==inf)
    41                 {
    42                     fi=1;
    43                     break;
    44                 }
    45                 else
    46                 {
    47                     ans+=dis[a[k]-'0'][a[k+1]-'0']-1;
    48                 }
    49             }
    50             if(fi==1)
    51             {
    52                 printf("-1");
    53             }
    54             else
    55             {
    56                 printf("%d",ans);
    57             }
    58             if(j==9)
    59             {
    60                 printf("
    ");
    61             }
    62             else
    63             {
    64                 printf(" ");
    65             }
    66         }
    67     }
    68 }
    View Code

      教训:写这道题时自己就不知道咋回事自己就设了个范围,想当然的以为跑到这个值就会将所有值跑出来,做题时不应该想当然,更应该分析题意,从题目入手。

  • 相关阅读:
    Linux CentOS7 下设置tomcat 开机自启动
    MYSQL批量导入数据报:[Err] 2006
    HTML页面仿WORD样式
    /usr/bin/ld: cannot find -lxxx 问题
    Linux 重命名
    Linux mail
    cenos 7 mysql
    linux 解压与压缩
    python 字符串替换
    cpu相关信息(进程、线程、核...)
  • 原文地址:https://www.cnblogs.com/plys/p/11425596.html
Copyright © 2011-2022 走看看