SDNU训练赛——E—G—H

题目连接:E:C. Ilya and Matrix

题目让我们用递归思路;其实,暴力分就可以了

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
#define MAXN 1000005*2
#define INF 0x3f3f3f3f//将近int类型最大数的一半,而且乘2不会爆int
const ll MOD = 332748118;

ll a[MAXN], b[MAXN];
int cmp(int x, int y)
{
    return x>y;
}
int main()
{
    memset(a, 0, sizeof(a));
    ll n, sum=0, ans=0;
    cin >> n;
    for(int i=1; i<=n; ++i)
    {
        cin >> a[i];
        ans+=a[i];
    }
    int cc=n;
    while(cc)
    {
        for(int i=1; i<=cc; ++i)
            b[i]++;
        cc/=4;
    }
    sort(a+1, a+n+1, cmp);
    for(int i=1; i<=n; ++i)
        sum+=a[i]*b[i];
    cout << sum << '\n';
    return 0;
}

G:A. The Contest

分析:直接检索就可以了,因为机器人可以屯题,,,,,


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
#define MAXN 10005
#define INF 0x3f3f3f3f//将近int类型最大数的一半,而且乘2不会爆int
const ll MOD = 332748118;

int a[MAXN];
struct student
{
    int a, b;
} stu[MAXN];

int cmp(student x, student y)
{
    return x.a < y.a;
}
int main()
{
    int n, m, sum=0;
    cin >> n;
    for(int i=0; i<n; ++i)
    {
        scanf("%d", &a[i]);
        sum+=a[i];
    }
    cin >> m;
    for(int i=0; i<m; ++i)
    {
        scanf("%d %d", &stu[i].a, &stu[i].b);
    }
    sort(stu, stu+n, cmp);
    int flag=1;
    for(int i=0; i<n; ++i)
    {
        if((stu[i].a < sum && stu[i].b > sum) || sum < stu[i].a)
        {
            flag=0;
            cout << stu[i].a << '\n';
            break;
        }
        if(stu[i].a == sum || stu[i].b == sum)
        {
            flag=0;
            cout << sum << '\n';
            break;
        }
    }
    if(flag) puts("-1");
    return 0;
}

H:B. Eugeny and Play List

分析:求在给出了一系列时刻时,放的是第几张唱片

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
#define MAXN 100005
#define INF 0x3f3f3f3f//将近int类型最大数的一半,而且乘2不会爆int
const ll MOD = 332748118;

int a[MAXN];
int bb[MAXN];
int main()
{
    memset(a, 0, sizeof(a));
    memset(bb, 0, sizeof(bb));
    int n, m, sum=0;
    cin >>n >> m;
    for(int i=1; i<=n; ++i)
    {
        int a, b;
        scanf("%d %d", &a, &b);
        sum+=a*b;
        bb[i] = sum;
    }
    for(int i=1; i<=m; ++i)
    {
        scanf("%d", &a[i]);
    }
    int x=1;
    for(int i=1; i<=m; ++i)
    {
        if(a[i] <= bb[x])
            cout << x << '\n';
        else
        {
            x++;
            i--;
        }
    }
    return 0;
}

你可能感兴趣的:(第二期水题)