您的位置:首页 > 其它

HDU 5742 It's All In The Mind

2016-07-22 10:50 411 查看

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


[align=left]Problem Description[/align]
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.

[align=left]Input[/align]
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.

[align=left]Output[/align]
For each test case, output the answer as an irreducible fraction "p/q", where p,q are integers, q>0.

[align=left]Sample Input[/align]

2

2 0

3 1

3 1

[align=left]Sample Output[/align]

1/1

200/201

[align=left]Author[/align]
zimpha

[align=left]Source[/align]
2016 Multi-University Training Contest 2

解析:



#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\n", p/g, q/g);
}
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: