杭电BC12.12

来源:互联网 发布:mac版flashplayer 编辑:程序博客网 时间:2024/04/30 05:40
题解链接:http://bestcoder.hdu.edu.cn/

1、GTW likes math
 
问题描述
某一天,GTW听了数学特级教师金龙鱼的课之后,开始做数学《从自主招生到竞赛》。然而书里的题目太多了,GTW还
有很多事情要忙(比如把妹),于是他把那些题目交给了你。每一道题目会给你一个函数f(x)=ax2+bx+cf
求这个函数在整数区间[l,r]之间的最值。

输入描述
第一行一个整数T,表示数据组数。(T≤1000)
对于每一组数据,有一行,共五个整数a,b,c,l,r。(∣a∣≤100,∣b∣≤100,∣c∣≤100,∣l∣≤100,∣r∣≤100,l

≤r)

输出描述
对于每一组数据,共一行两个整数max,min,表示函数在整数区间[l,r][l,r][l,r]中的最大值和最小值。


输入样例
1
1 1 1 1 2


输出样例
7 3


代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;

int main() {
        int T;
        scanf("%d",&T);
        while (T --) {
                int a,b,c,l,f;
                scanf("%d%d%d%d%d",&a,&b,&c,&l,&f);
                int minm = 2147483647,maxm = -2147483647;
                for (int i=l;i<=r;i++) {
                        maxm = max(maxm,a*i*i+b*i+c);
                        minm = min(minm,a*i*i+b*i+c);
                }
                printf("%d %d\n",maxm,minm);
        }
}

表示后面的题再次没做出来,观看了几个大神的代码,默默地重新打了一遍
2、GTW likes gt

问题描述
从前,有n只萌萌的GT,他们分成了两组在一起玩游戏。他们会排列成一排,第i只GT会随机得到一个能力值bi。在第i
秒的时候,第i只GT可以消灭掉所有排在他前面的和他不是同一组的且能力值小于他的GT。
为了使游戏更加有趣,GT的首领GTW会发功m次,第iii次发功的时间为ci,则在第ci
秒结束后,b1,b2,...,bci都会增加1。
现在,GTW想知道在第n秒之后,会有几只GT存活下来。

输入描述
第一行只有一个整数T(T≤5),表示测试数据组数。
第二行有两个整数n,m。表示GT的个数和GTW发功的次数。(1≤n≤50000,1≤m≤500001)
第三到n+2行,每行有两个整数ai,bi,表示第iii只GT在哪个组和他的能力值 (0≤a[i]≤1,1≤b[i]≤106)
第n+3行到第n+m+2行,每行有一个整数ci
,表示GTW第iii次发功的时间。1≤c[i]≤n

输出描述
总共TTT行,第iii行表示第iii组数据中,GT存活的个数。


输入样例
1
4 3
0 3
1 2
0 3
1 1
1
3
4

输出样例
3



大神代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

struct pp
{
    int num;
    int v;
}s[50010];

int p[50010];
int h[50010];

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int n, m;
        scanf("%d%d", &n, &m);
        h[0] = 0;
        h[n + 1] = 0;
        for (int i = 1; i <= n; ++i)
        {
              scanf("%d%d", &s[i].num, &s[i].v);
              h[i] = 0;
        } 
        for (int i = 0; i < m; ++i)
        {
            scanf("%d", &p[i]);
            h[p[i]]++;
        }
        for (int i = n; i >= 1; --i)
        {
            h[i] += h[i + 1];
            s[i].v += h[i];
        }
        int ans = 0;
        int max1 = -1;
        int max2 = -1;
        for (int i = n; i >= 1; --i)
        {
            if (s[i].num == 0)
            {
                if (max2 <= s[i].v)
                {
                    ans++;
                    //printf("%d %d\n", max2, s[i].v);
                }
                max1 = max(max1, s[i].v);
            }
            else
            {
                if (max1 <= s[i].v)
                {
                    ans++;
                    //printf("%d %d\n", max1, s[i].v);
                }
                max2 = max(max2, s[i].v);
            }
            //printf("%d %d\n", max1, max2);
        }
        printf("%d\n", ans);

    }

    return 0;
}


3、GTW likes function
原题链接:
http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=658&pid=1003



代码如下:
#include <cstdio>
#include <algorithm>

using namespace std;

long long phi(long long x) {
       long long ans = x;
       long long pre = x;
       for (long long i=2;i*i<=pre && x > 1;i++) {
        if (x % i == 0) {
          ans /= i;
            ans *= (i-1);
            while (x % i == 0) x /= i;
        }
       }
        if (x > 1) ans /= x,ans *= (x-1);
        return ans;
}       
int main() {
        long long n,x;
        while (~scanf("%I64d%I64d",&n,&x)) printf("%I64d\n",phi(n+x+1));
}




0 0
原创粉丝点击