HDU5742 It’s All In The Mind(貪心)
鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=5742
題目
Time Limit:1000MS Memory Limit:65536KB
Description
Professor Zhang has a number sequence
- For every
i∈{1,2,...,n},0≤ai≤100 . - The sequence is non-increasing, i.e.
a1≥a2≥...≥an . - The sum of all elements in the sequence is not zero.
Professor Zhang wants to know the maximum value of
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
In the next
Output
For each test case, output the answer as an irreducible fraction
Sample Input
2
2 0
3 1
3 1
Sample Output
1/1
200/201
題意
給你一個數列的長度和其中某幾個元素,求滿足非升序列的條件下
分析
最大值即分母儘可能小,
源碼
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
#include<string>
#include<sstream>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<stack>
#include<utility>
#include<sstream>
#define mem0(x) memset(x,0,sizeof x)
#define mem1(x) memset(x,-1,sizeof x)
#define dbug cout<<"here"<<endl;
//#define LOCAL
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int INF = 0x3f3f3f3f;
const int MAXN = 1e6+10;
const int MOD = 1000000007;
int a[110];
int gcd(int a, int b){
if(b == 0)
return a;
return gcd(b, a%b);
}
int main(){
#ifdef LOCAL
freopen("C:\\Users\\asus-z\\Desktop\\input.txt","r",stdin);
freopen("C:\\Users\\asus-z\\Desktop\\output.txt","w",stdout);
#endif
int t;
scanf("%d", &t);
int n,m;
while(t--){
scanf("%d%d", &n, &m);
mem0(a);
bool vis[3];
mem0(vis);
int tmpP,tmpVal;
for(int i = 1; i <=m; ++i){
scanf("%d%d", &tmpP, &tmpVal);
a[tmpP] = tmpVal;
if(tmpP==1 || tmpP==2)
vis[tmpP] = 1;
}
ll sum = 0;
if(!vis[1]){
a[1] = 100;
if(!vis[2])
a[2] = a[1];
}
else{
if(!vis[2])
a[2] = a[1];
}
int lastVal = 0;
for(int i = n; i >= 1; --i){
if(!a[i])
sum += lastVal;
else{
lastVal = a[i];
sum += lastVal;
}
}
int g = gcd(a[1]+a[2], sum);
printf("%d/%d\n", (a[1]+a[2])/g, sum/g);
}
return 0;
}