• Work Conversion


    Most work in a factory is performed by robots. In the robots’ work, the most time used is when converting an operation.
    Therefore, if you design an automation system, you need to consider the work conversion.
    Consider the work conversion status as given in the graph below:

    For the above case,
    it is 1, 1, 2 for the shortest frequency of work conversion from Work No. 1 to Work No. 2, 3 and 4;
    it is 3, 2, 1 from Work No. 2 to No. 1, 3 and 4; it is 1, 2, 3 for Work No. 3 to No. 1, 2 and 4;
    and it is 2, 3, 1 from Work No. 4 to No. 1, 2 and 3.
    At this moment, the sum of the shortest frequencies of the work conversions is 1+1+2+3+2+1+1+2+3+2+3+1 = 22.


    In this graph, all pairs are 12 pairs i.e., from Work No. 1 to No. 2; from No. 1 to No. 3; ...; from No. 4 to No. 3.
    Therefore, the mean frequency of conversion from a certain work to another is 22/12, which is 1.833.


    Calculate the mean frequency of work conversions from a certain work to another when a graph of the work conversion status is given.


    Time limit : 1 sec (Java : 2 sec)


    [Input]
    There can be more than one test case in the input file. The first line has T, the number of test cases.
    Then the totally T test cases are provided in the following lines (T ≤ 10 )


    The count of work Conversions, N, is given at the first row. (1 ≤ N ≤ 500)
    The moving information, s and e, is given from the next row to the number of rows of N, which means it can move from Work No. s to Work No. e.
    However, it can’t go from Work No. e to Work No. s directly as the work movement processes only one way in serial order.
    At this moment, there are no such cases that are unable to move from a certain work no. to another.


    [Output]
    For each test case, you should print "Case #T" in the first line where T means the case number.

    For each test case, you should round off the mean frequency of work conversion at three decimal places moving from a certain work to another at the first row and generate the values.


    [I/O Example]

    Input
    2
    5
    1 2
    2 4
    1 3
    3 1
    4 3
    25
    1 3
    1 5
    1 7
    2 1
    2 7
    3 8
    3 9
    3 10
    4 7
    5 1
    6 4
    6 7
    7 10
    7 11
    8 1
    8 4
    8 5
    8 10
    9 10
    10 1
    10 2
    10 6
    10 8
    10 9
    11 3


    Output
    Case #1

    1.833

    Case #2
    2.255 

    代码:

    #include <iostream>
    #include <stdio.h>
    #include <queue>
    #include <iomanip>
    
    #define MAX 9999
    int map[501][501];
    int dis[501];
    int sum[501];
    
    int InitArray();
    using namespace std;
    
    int main()
    {
        //freopen("test.txt","r",stdin);
        int T;
        cin>>T;
        for(int t=1; t<=T; t++)
        {
            int n;
            int s,e;
            int maxPoint = 0;
            int temp = 0;
            int num;
            float countSteps = 0;
            float countPairs = 0;
            float result = 0;
            queue<int> qt;
            InitArray();
            cin>>n;
            for(int i=0; i<n; i++)
            {
                cin>>s>>e;
                map[s][e] = 1;
                if(s >= maxPoint)
                {
                    maxPoint = s;
                }
                else if(e >= maxPoint)
                {
                    maxPoint = e;
                }
            }
    
            for(int k=1; k<=maxPoint; k++)
            {
                for(int i=1; i<=maxPoint; i++)
                {
                    dis[i] = MAX;
                }
                dis[k] = 0;
                qt.push(k);
    
                while(!qt.empty())
                {
                    num = qt.front();
                    qt.pop();
                    for(int h=1; h<=maxPoint; h++)
                    {
                        temp = dis[num] + map[num][h];
                        if(temp < dis[h])
                        {
                            dis[h] = temp;
                            qt.push(h);
                        }
                    }
                }
    
                for(int i=1; i<=maxPoint; i++)
                {
                    if(dis[i]>0 && dis[i]< MAX)
                    {
                        countPairs++;
                        sum[k] += dis[i];
                    }
                }
            }
    
            for(int j=1; j<=maxPoint; j++)
            {
                countSteps += sum[j];
            }
    
            result = countSteps/countPairs;
            cout<<"Case #"<<t<<endl;
            //cout<<result<<endl;
            //cout<<fixed<<setprecision(3)<<result<<endl;
            printf("%.3f
    ",result);
        }
    
    
        //cout << "Hello world!" << endl;
        return 0;
    }
    
    int InitArray()
    {
        for(int i=1; i<501; i++)
        {
            dis[i] = MAX;
            sum[i] = 0;
            for(int j=1; j<501; j++)
            {
                if(i == j)
                {
                    map[i][j] = 0;
                }
                else
                {
                    map[i][j] = MAX;
                }
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Flask + vue 前后端分离的 二手书App
    Kafka 0.10.0.1 consumer get earliest partition offset from Kafka broker cluster
    Kafka topic Schema version mismatch error
    ORM的多表查询详述
    ORM多表操作之创建关联表及添加表记录
    ORM的单表操作
    Django的模板层简介
    Django的视图层简介
    Django中的路由配置简介
    Django简介及Django项目的创建详述
  • 原文地址:https://www.cnblogs.com/kingshow123/p/practicec.html
Copyright © 2020-2023  润新知