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
  • 相关阅读:
    笔记20200430:异常机制
    笔记20200429:面向对象
    笔记20200429:数组
    笔记20200428:方法的定义及调用、重装、命令行参数、可变参数、递归
    笔记20200427:javadoc文档、Scanner、顺序结构、选择结构、循环结构
    CSS+DIV入门第一天基础视频 CSS选择器层叠性和继承性
    网站实战 从效果图开始CSS+DIV 布局华为网站
    CSS中的间距设置与盒子模型
    CSS选择器
    CSS颜色及文本字体
  • 原文地址:https://www.cnblogs.com/kingshow123/p/practicec.html
Copyright © 2011-2022 走看看