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.
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.
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; }