群赛11----2017.9.20

来源:互联网 发布:漫游数据是什么意思 编辑:程序博客网 时间:2024/06/14 04:59

  • T1 The Wall
    • 题意
    • 解法
    • 代码
    • 网址这一题
    • 小结
  • T2 Maximal Area Quadrilateral
    • 题意
    • 解法
    • 代码
    • 网址这一题
    • 小结
  • T3 Tourist Problem
    • 题意
    • 解法
    • 代码
    • 网址这一题
    • 小结
  • T4 Bubble Sort Graph
    • 题意
    • 解法
    • 代码
    • 网址这一题
    • 小结
  • T5 Iahub and Permutations
    • 题意
    • 解法
    • 代码
    • 网址这一题
    • 小结

T1 The Wall

题意:

给出k,g,a,b四个数,问在ab范围内有多少个既是k的倍数,g的倍数的数。

解法:

暴力.

代码:

#include <bits/stdc++.h>using namespace std;int main(){    int a, b, c, d, bei;    scanf("%d%d%d%d", &a, &b, &c, &d);    bei = a / __gcd(a, b) * b;    if (c % bei == 0)        cout << d / bei - c / bei + 1;    else        cout << d / bei - c / bei;    return 0;}

网址:这一题

小结:

**此类题目水题。**

T2 Maximal Area Quadrilateral

题意:

给出k个点的坐标,问能组成的最大的正方形的面积。

解法:

几何.

代码:

#include <bits/stdc++.h>using namespace std;#define M 350#define eps 0#define inf 10000000000int n, i, j, k;double max1, max2, max3, yong;struct node{    double x, y;} p[M];double jisuan(int i, int j, int k){    return ((p[k].x - p[i].x) * (p[k].y - p[j].y) - (p[k].y - p[i].y) * (p[k].x - p[j].x)) / 2.0;}struct line{    void guochen()    {        for (j = 0; j < n; j++)        {            if (i == j)                continue;            max1 = -inf, max2 = -inf;            for (k = 0; k < n; k++)            {                if (i == k || j == k)                    continue;                yong = jisuan(i, j, k);                if (yong < eps)                    max1 = max(max1, -yong);                else                    max2 = max(max2, yong);            }            max3 = max(max3, max1 + max2);        }    }} hanshu;int main(){    cin >> n;    for (i = 0; i < n; i++)        scanf("%lf%lf", &p[i].x, &p[i].y);    max1 = -inf, max2 = -inf, max3 = -inf;    for (i = 0; i < n; i++)        hanshu.guochen();    printf("%.6f\n", max3);    return 0;}

网址:这一题

小结:

**此类题目暴力。**

T3 Tourist Problem

题意:

给出几个点在一条线上,两个点的距离是两个点的坐标差,输出所有走法的和除以走法数的分子和分母。

解法:

暴力优化。

代码:

#include "bits/stdc++.h"using namespace std;#define LL long long#define N 10000000LL a[N + 1];LL s1 = 0, s2 = 0, s3 = 0, ans, p, q;int main(){    LL n;    cin >> n;    for (LL i = 1; i <= n; i++)    {        cin >> a[i];        s1 += a[i];    }    sort(a + 1, a + n + 1);    for (LL i = 1; i <= n; i++)    {        if (i > 1)            s3 += a[i - 1];        s2 += ((i - 1) * a[i] - s3);    }    ans = s2 * 2 + s1;    p = ans / (__gcd(ans, n));    q = n / (__gcd(ans, n));    cout << p << " " << q;}

网址:这一题

小结:

**此类题目优化。**

T4 Bubble Sort Graph

题意:

给你一个数列,利用冒泡排序,将交换的两个数相联系,问有一个子集,其内的元素一一无关,输出最大的子集大小。

解法:

归并排序

代码:

#include <bits/stdc++.h>using namespace std;#define N 500000int a[N],d[N];int main(){    int n;    scanf("%d", &n);    for (int i = 1; i <= n; i++)        scanf("%d", &a[i]);    if (n == 0)    {        printf("0\n");        return 0;    }    d[1] = a[1];    int len = 1;    for (int i = 2; i <= n; i++)    {        if (a[i] >= d[len])            d[++len] = a[i];        else        {            int j = upper_bound(d + 1, d + len + 1, a[i]) - d;            d[j] = a[i];        }    }    printf("%d\n", len);    return 0;}

网址:这一题

小结:

**此类题目较水。**

T5 Iahub and Permutations

题意:

自己看,不会讲.(错排加强版)

解法:

根据题意写就行了,找规律。

代码:

#include <bits/stdc++.h>#define ll long longusing namespace std;const int p = 1e9 + 7;ll f[2010], gg[2010];int sum = 0, num = 0, a[2010], n;int main(){    scanf("%d", &n);    gg[0] = 1;    for (int i = 1; i <= n; ++i)    {        scanf("%d", &a[i]);        if (a[i] == -1)            sum++;    }    for (int i = 1; i <= n; ++i)        if (a[i] != -1 && a[a[i]] == -1)            num++;    for (int i = 1; i <= num; ++i)        gg[i] = gg[i - 1] * i % p;    int t = sum - num;    f[0] = gg[num];    for (int i = 1; i <= t; ++i)    {        f[i] = ((num + i - 1) * f[i - 1]) % p;        if (i > 1)            f[i] = (f[i] + (i - 1) * f[i - 2]) % p;    }    printf("%lld", f[t]);}

网址:这一题

小结:

**此类题目较难。**
原创粉丝点击