It's All In The Mind
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 555 Accepted Submission(s): 243
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=1ai 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=1ai 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
题意:给定一个序列,满足三个条件
1、0<= ai <= 100;
2、a1 >= a2 >= ... >= an;
3、所有元素和 sum 不为0.
求(a1+a2)/sum
分析:单纯的暴力,没什么好说的,就是注意那三个条件,别被套路....
#include <iostream>
#include <cstdio>
using namespace std;
int a[105];
int _gcd(int x,int y)
{
int z;
if(x<y) z=x,x=y,y=z;
while(y)
{
z=x%y;
x=y;
y=z;
}
return x;
}
int main()
{
int T,i,j,n,m;
scanf("%d",&T);
while(T--)
{
int x,y,t=0;
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++)
a[i]=-1;
for(i=0; i<m; i++)
{
scanf("%d%d",&x,&y);
a[x]=y;
}
if(n==2||m==0)
{
printf("1/1\n");
continue;
}
int nn=0,mm=0,fail=0;
for(i=n; i>=3; i--)
{
if(a[i]!=-1)
{
t=a[i];
fail=1;
mm+=t;
}
else
{
if(!fail)
{
mm+=0;
}
else
{
mm+=t;
}
}
}
if(a[1]==-1)
{
nn+=100,mm+=100;
if(a[2]==-1)
nn+=100,mm+=100;
else
nn+=a[2],mm+=a[2];
}
else
{
nn+=a[1],mm+=a[1];
if(a[2]==-1)
nn+=a[1],mm+=a[1];
else
nn+=a[2],mm+=a[2];
}
int dd=_gcd(nn,mm);
printf("%d/%d\n",nn/dd,mm/dd);
}
return 0;
}