SDUT 2023 summer team contest(for 22) - 10

A - Normal Magic Square

请添加图片描述
又到了我最喜欢的签到题环节 直接秒

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define xx first
#define yy second
typedef pair<int, int> PII;
const int inf = 0x3f3f3f3f;
const int N = 1e6 + 10;

int v[N], n, m, k, x, t, T;

void ClearFloat()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}

signed main()
{
    ClearFloat();
    cin >> n;
    if (n == 1)
        cout << "1";
    else
        cout << n * n * (n * n + 1) / (2 * n);
    return 0;
}

D - 38 parrots

下次一定


在这里插入图片描述
线段树维护一下 队友对这道题有详细题解 链接🔗

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define xx first
#define yy second
typedef pair<int, int> PII;
const int inf = 0x3f3f3f3f;
const int N = 1e5 + 10;
int n, k, T, cnt, v[N]; // cnt记录插入到第几个了
int tr[N * 4];
priority_queue<PII, vector<PII>, greater<PII>> q;

void ClearFloat()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}

void pushup(int u)
{
    if (tr[u << 1] == -1 && tr[u << 1 | 1] == -1)
        tr[u] = -1;
    else if (tr[u << 1] != -1 && tr[u << 1 | 1] == -1)
        tr[u] = tr[u << 1];
    else if (tr[u << 1] == -1 && tr[u << 1 | 1] != -1)
        tr[u] = tr[u << 1 | 1];
    else
        tr[u] = gcd(tr[u << 1], tr[u << 1 | 1]);
}

void build(int u, int l, int r)
{
    if (l == r)
    {
        tr[u] = -1;
        return;
    }
    int mid = (l + r) >> 1;
    build(u << 1, l, mid);
    build(u << 1 | 1, mid + 1, r);
    pushup(u);
}
void update(int u, int l, int r, int cnt, int x)
{
    if (l == r)
    {
        tr[u] = x;
        return;
    }
    int mid = (l + r) >> 1;
    if (cnt <= mid)
        update(u << 1, l, mid, cnt, x);
    if (cnt > mid)
        update(u << 1 | 1, mid + 1, r, cnt, x);
    pushup(u);
}
signed main()
{
    ClearFloat();
    build(1, 1, 100000);
    cin >> T;
    while (T--)
    {
        char ch;
        cin >> ch;
        if (ch == '+')
        {
            cin >> v[++cnt];
            q.push({v[cnt], cnt});
            update(1, 1, 100000, cnt, v[cnt]);
        }
        if (ch == '-')
        {
            ++k;
            update(1, 1, 100000, k, -1);
        }
        if (ch == '?')
        {
            int f = 1;
            while (q.size() && q.top().yy <= k)
                q.pop();
            if (q.empty() || tr[1] != q.top().xx)
                f = 0;
            if (f)
                cout << "Y" << tr[1] << endl;
            else
                cout << "N\n";
        }
    }
    return 0;
}

E - Black Box请添加图片描述

无语死了家人们 三个人都能读错题 看着别人框框accept 自己一直红

 #include <bits/stdc++.h>
using namespace std;

#define int long long
#define xx first
#define yy second
typedef pair<int, int> PII;
const int inf = 0x3f3f3f3f;
const int N = 1e6 + 10;

int v[N], n, m, k, x, t, T;
string s;

void ClearFloat()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}

signed main()
{
    ClearFloat();
    cin >> n;
    cin >> s;
    x = 1;
    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] == '1' && x)
        {
            cout << '1';
            x = 0;
            continue;
        }
        if (x == 1)
        {
            cout << "0";
            continue;
        }
        if (s[i] == '1')
            cout << '0';
        else
            cout << '1';
    }
    return 0;
}

H - Exam

下次一定


在这里插入图片描述
DP 做三个判断就行,符合条件的就要给状态方程加上相应数量

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define xx first
#define yy second
typedef pair<int, int> PII;
const int inf = 0x3f3f3f3f;
const int N = 1e6 + 10;

void ClearFloat()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}
int read()
{
    int s = 0, w = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
            w = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
        s = s * 10 + ch - '0', ch = getchar();
    return s * w;
}

int v[N], n, m, k, x, t, T;

signed main()
{
    n = read(), m = read();
    for (int i = 2; i < n; i++)
    {
        for (int j = 2; j <= n; j++)
            v[j] = 0;
        v[1] = 1;
        for (int j = 1; j <= n; j++)
        {
            v[j] += v[j - 1];
            if (j > i)
                v[j] += v[j - i];
            if (j % 7 == 0)
                v[j] += v[j / 7];
        }
        if (v[n] == m)
        {
            cout << i << endl;
            return 0;
        }
    }
    cout << '0';
}


I - Hole Punch

请添加图片描述
大胆猜想 小心求证!! 只有 大胆猜想 的就是 s b
n n n 整除后等于偶数的的所有因子

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define xx first
#define yy second
typedef pair<int, int> PII;
const int inf = 0x3f3f3f3f;
const int N = 1e6 + 10;

int v[N], n, m, k, x, t, T;

void ClearFloat()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}
set<int> s;
signed main()
{
    ClearFloat();
    cin >> n;
    for (int i = 1; i <= sqrt(n); i++)
    {
        if (n % i == 0)
        {
            if ((n / i) % 2 == 0)
                s.insert(i);
            if (n / (n / i) % 2 == 0)
                s.insert(n / i);
        }
    }
    cout << s.size() << endl;
    for (auto it = s.begin(); it != s.end(); it++)
    {
        if (*it == n)
            break;
        if (it != s.begin())
            cout << " ";
        cout << *it;
    }
    return 0;
}

J - Multidimensional Points

请添加图片描述
非常恶心的一道题!!!居然卡我cin cout 改成scanf就正好967 m s ms ms卡过去了 也可以加快读
用前缀和处理一下就ok了 签到题

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define xx first
#define yy second
typedef pair<int, int> PII;
const int inf = 0x3f3f3f3f;
const int N = 1e6 + 10;

int v[N], n, m, k, x, t, T;
int f[N];

signed main()
{
    scanf("%lld", &n);
    for (int i = 1; i <= n; i++)
        scanf("%lld", &v[i]);
    for (int i = 1; i <= n; i++)
    {
        scanf("%lld", &x);
        v[i] -= x;
        f[i] += v[i] * v[i] + f[i - 1];
    }
    cin >> m;
    while (m--)
    {
        int a, b;
        scanf("%lld %lld", &a, &b);
        double c = sqrt(f[b] * 1.000 - 1.000 * f[a - 1]);
        printf("%.6lf\n", c);
    }
    return 0;
}

∗ ∗ 下次一定 ∗ ∗ **下次一定** 下次一定请添加图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值