zoukankan      html  css  js  c++  java
  • HDU 5742 It's All In The Mind

    It's All In The Mind

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 409    Accepted Submission(s): 189


    Problem Description
    Professor Zhang has a number sequence a1,a2,...,an. However, the sequence is not complete and some elements are missing. Fortunately, Professor Zhang remembers some properties of the sequence:

    1. For every i ∈{1,2,...,n}, 0≤ai≤100.
    2. The sequence is non-increasing, i.e. a1≥a2≥...≥an.
    3. The sum of all elements in the sequence is not zero.

    Professor Zhang wants to know the maximum value of (a1+a2)/∑ni=1 ai among all the possible sequences.
     
    Input
    There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases. For each test case:

    The first contains two integers n and m (2≤n≤100,0≤m≤n) -- the length of the sequence and the number of known elements.

    In the next m lines, each contains two integers xi and yi (1≤xi≤n,0≤yi≤100,xi<xi+1,yi≥yi+1)  indicating that axi = yi.
     
    Output
    For each test case, output the answer as an irreducible fraction "p/q", where p,q are integers, q>0.
     
    Sample Input
    2
    2 0
    3 1
    3 1
     
    Sample Output
    1/1
    200/201
     
    Author
    zimpha
     
    Source
     
     
     
    解析:
     
     
     
     
     
    #include <bits/stdc++.h>
    
    int a[105];
    
    int gcd(int a, int b)
    {
        return b == 0 ? a : gcd(b, a%b);
    }
    
    int main()
    {
        int T, n, m;
        scanf("%d", &T);
        while(T--){
            scanf("%d%d", &n, &m);
            memset(a, -1, sizeof(a));
            int x, y;
            while(m--){
                scanf("%d%d", &x, &y);
                a[x] = y;
            }
            if(a[1] == -1)
                a[1] = 100;
            if(a[2] == -1)
                a[2] = a[1];
            int p = a[1]+a[2], q = p;
            a[n+1] = 0;
            for(int i = n; i >= 3; --i){
                if(a[i] == -1)
                    a[i] = a[i+1];
                q += a[i];
            }
            int g = gcd(p, q);
            printf("%d/%d
    ", p/g, q/g);
        }
        return 0;
    }
    

      

  • 相关阅读:
    Java学习之--List和ArrayList
    Linux
    Linux
    Docker 容器管理
    Docker 镜像管理
    如何理解 AWS VPC
    Linux 内核版本
    Windows 快速切换到当前目录下的dos环境
    Git 整理
    TCP/IP
  • 原文地址:https://www.cnblogs.com/inmoonlight/p/5693965.html
Copyright © 2011-2022 走看看