HDU5743 多校2.9

来源:互联网 发布:我欲封天时装进阶数据 编辑:程序博客网 时间:2024/05/22 10:37

题目大意:求(a1+a2)/sum的最大值

思路:分子尽可能大就好

#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <stack>#include <queue>#include <algorithm>#include <vector>#include <map>#include <set>#include <stdlib.h>#include <iomanip>using namespace std;#pragma comment(linker, "/STACK:102400000,102400000")#define maxn 105#define MOD 1000000007#define mem(a , b) memset(a , b , sizeof(a))#define LL long long#define ULL unsigned long long#define FOR(i , n) for(int i = 1 ;  i<= n ; i ++)typedef pair<int , int> pii;//priority_queue<int , vector<int> , greater<int> > Q;int t ,  n , m;int a[maxn] ;int gcd(int a , int b){    if(b == 0) return a;    else return gcd(b , a % b);}int main(){    scanf("%d" , &t);    while(t--)    {        mem(a , -1);        scanf("%d %d" , &n , &m);        int u , v;        for(int i = 0 ; i < m ; i ++)        {            scanf("%d %d" , &u , &v);            a[u] = v;        }        if(a[1] == -1 ) a[1] = 100;        if(a[2] == -1) a[2] = a[1];        int flag = 0 , sum = 0 , sum2 = 0;        for(int i = n ; i >= 1 ; i --)        {            if(a[i] != -1)            {                flag = a[i];            }            else            {                a[i] = flag;            }            sum += a[i];        }        if(a[1] > -1) sum2 += a[1];        if(a[2] > -1) sum2 += a[2];        int tmp = gcd(sum , sum2);        printf("%d/%d\n" , sum2 / tmp , sum / tmp);    }    return 0;}


0 0
原创粉丝点击