您的位置:首页 > 大数据 > 人工智能

hdu 5742 (2016 Multi-University Training Contest 2)

2016-07-22 11:34 561 查看

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



[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=1ai 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

题意:给定一个序列,满足三个条件

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