zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    iOS- static extern const
    App 性能分析
    迭代器和生成器
    软件工程之个人软件开发----起步
    myeclipse调式与属性显示
    hdu 6188
    uva10780 质因子分解
    云服务器端口号的几个操作
    Redis错误 : MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk.
    ubuntu系统安装宝塔面板Linux版
  • 原文地址:https://www.cnblogs.com/kingshow123/p/practicec.html
Copyright © 2011-2022 走看看