zoukankan      html  css  js  c++  java
  • 2017 JUST Programming Contest 3.0 I. Move Between Numbers

    题意:n,s,e,代表有n个长度为20的数字串,问是否能从s串走到e串,可以走的条件是A,B两串sum(min(Ai,Bi)),Ai代表A中i的个数(0<=i<=9),问最短几步

    思路:我们可以求出每个串可以到达其他哪个串,建图,跑从s到e的最短路,(莫名RE,开10倍过了。。。)

    http://codeforces.com/gym/101502/problem/I

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int inf=1000000;
     4 
     5 int d[300][150];
     6 struct node{
     7     int val,id;
     8     node(int id,int val):id(id),val(val){}
     9     bool operator <(const node &x)const{
    10         return val>x.val;
    11     }
    12 };
    13 bool vis[3000];
    14 int dis[3000];
    15 vector<int > g[3000];
    16 int n,s,e;
    17 
    18 void dfs(int u){
    19     memset(vis,0,sizeof(vis));
    20     for(int i=0;i<=n+1;i++) dis[i]=inf;
    21     priority_queue<node> q;
    22     while(!q.empty()) q.pop();
    23     q.push(node(u,0));
    24     dis[u]=0;
    25     while(!q.empty()){
    26         int cur=q.top().id;
    27         q.pop();
    28         if(vis[cur]) continue;
    29         vis[cur]=true;
    30         for(int i=0;i<g[cur].size();i++){
    31             int v=g[cur][i];
    32             if(!vis[v]&&dis[cur]+1<dis[v]){
    33                 dis[v]=dis[cur]+1;
    34                 q.push(node(v,dis[v]));
    35             }
    36         }
    37     }
    38 }
    39 int main(){
    40     int t ;
    41     cin>> t;
    42     while(t--){
    43         char ch[30];
    44         scanf("%d%d%d",&n,&s,&e);
    45         memset(d,0,sizeof(d));
    46         for(int i=0;i<3000;i++) g[i].clear();
    47         for(int i=1;i<=n;i++){
    48             scanf("%s",ch+1);
    49             for(int j=1;j<=20;j++){
    50                 d[i][ch[j]-'0']++;
    51             }
    52         }
    53         
    54         for(int i=1;i<=n;i++){
    55             for(int j=i+1;j<=n;j++){
    56                 int sum=0;
    57                 for(int k=0;k<=9;k++)
    58                 sum+=min(d[i][k],d[j][k]);
    59                 if(sum==17) {
    60                    g[i].push_back(j);
    61                    g[j].push_back(i);
    62                   // cout<<i<<" "<<j<<endl;
    63                 }
    64             }
    65         }
    66         dfs(s);
    67         if(dis[e]==inf) {
    68             cout<<-1<<endl;
    69         }
    70         else cout<<dis[e]<<endl;
    71     }
    72 }
  • 相关阅读:
    PHP代码审计-command injection-dvwa靶场
    PHP代码审计-Brute Force-dvwa靶场
    PHP代码审计-XSS
    Linux下安装SQLServer2019
    Linux--每日一个跑路小命令之 chmod 000 -R /
    linux的小命令-fuck
    uni-app 页面样式与布局
    uni-app内置基础组件
    uni-app pages.json常用配置
    uni-app项目目录和文件作用
  • 原文地址:https://www.cnblogs.com/hhxj/p/7528057.html
Copyright © 2011-2022 走看看